Я внедряю MVP / M-V-VM в WPF, и мне пока повезло с этим. Однако я не вижу, как эта модель поддерживает реализацию модальных диалоговых окон. Я извлек свою работу из Crack.NET (http://www.codeplex.com/cracknetproject), чтобы узнать, как это работает.
У меня есть представление ShellView (которое является просто XAML), в котором есть меню. Меню связывается с командой в ShellModelView, которая говорит «EditPreferences».
ShellModelView реализует ICommand для EditPreferences, и здесь мы хотим создать диалоговое окно, чтобы позволить пользователю редактировать настройки для приложения.
Несколько проблем здесь:
1. ShellModelView не имеет ссылки на ShellView для правильного родительского диалога. ShellModelView - это DataContext ShellView, но я не вижу обратной ссылки, которая настроена.
2. ShellModelView не должен загружать явный интерфейс в любом случае. Итак, какова правильная модель взаимодействия здесь?
3. Как мне создать свой PreferencesDialog, чтобы он был правильно разделен между логикой и представлением? PreferencesDialog сам по себе должен быть Window, чтобы вы могли вызывать ShowDialog для него, но это означает, что вам нужна ссылка на Window (например, View) для его создания. В идеале я должен иметь возможность модульного тестирования кода / проверки в PreferencesDialog без создания экземпляра представления (возможно, с использованием представления Mock?).