Представление никогда не становится видимым при реализации 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, а затем добавить свою функциональность - по крайней мере, тогда вы поймете, что однажды это сработало.
Ргдс Джон