Представление никогда не становится видимым при реализации Caliburn + MEF в существующем приложении WPF

У меня есть существующий проект WPF, и я хочу перенести его на калибровку с MEF.

Моя оболочка - это модель представления с именем MainViewModel, которая открывает диалоговое окно с использованием DefaultWindowManager. Это окно входа в систему, все работает нормально, но после входа в систему программа немного останавливается, а затем завершается. и MainView никогда не становится видимым. С помощью отладки я проверил и убедился, что MainView действительно создается, он просто никогда не становится активным или видимым.

Я попытался унаследовать мою MainViewModel от Screen, IShell и NotifyPropertyBase, IShell и IShell. Есть ли у кого-нибудь идеи или подсказки для меня, чтобы попробовать спасибо.

Я не использую caliburn в MainView и ViewModel, кроме того, чтобы просматривать ссылки на модели, так как я просто взял старые модели просмотра / просмотра, это может быть связано с чем-то? Есть ли способ повернуть ViewModelBinder для определенных viewmodels / views?

2 ответа

Решение

На самом деле Роб Айзенберг из калибра был очень полезным, и он помог мне с этой проблемой.

Проблема заключалась в том, что когда я переключился на калибровку, LoginView было первым окном, которое было открыто, и оно было закрыто до того, как было открыто окно MainView.

Windows рассматривает первое открытое окно как главное окно. и когда главное окно закрывается, окна проверяют, открыты ли другие окна, если нет, оно закрывает приложение.

Он предоставил возможное решение: сделать loginviewmodel оболочкой и закрыть ее после открытия mainviewmodel.

Я упомяну об этом на случай, если ваша проблема будет такой же, как и у меня, так как она несколько замедлила меня в последнее время... Если в вашей оболочке есть некоторые импорты, которые не удовлетворяются, то оболочка не появится, и эффект скорее сбивает с толку. Убедитесь, что у вас есть [Import(AllowDefault=True)] в качестве вашего атрибута или используйте [ImportMany]

Однако, поскольку вы говорите, что при отладке есть экземпляр, проблема может заключаться в том, как вы используете Caliburn(Micro?). В этом случае я предлагаю вам скопировать пример Caliburn, а затем добавить свою функциональность - по крайней мере, тогда вы поймете, что однажды это сработало.

Ргдс Джон

Другие вопросы по тегам