Открытие окна с использованием шаблона MVVM

Я работаю над новым WPF-приложением, и я стараюсь оставаться как можно ближе к шаблону MVVM. Мои файлы XAML прямо сейчас не имеют кодовых имен, и вся моя интерактивность достигается с помощью класса и команд Josh Smith RelayCommand в классах ViewModel.

Это сработало отлично, пока я не начал работать над задачами домашнего хозяйства, например, о поле и странице настроек системы. Я хочу иметь их как модальные диалоги, но если я создам RelayCommand для открытия этих страниц, я создам зависимость от представления в моей модели представления.

Это поражает меня против зерна шаблона MVVM.

Существует ли установленный метод для создания новых окон (модальных и/или немодальных) в шаблоне MVVM без создания зависимости? Кажется, единственный способ сохранить чистку ViewModel в том, чтобы создать обработчик события Click в файле XAML codebehind и создать новое представление в старом представлении.

Любые рекомендации?

Ответ 1

Один из способов справиться с этим - реализовать службу, которая предоставляет Views для ViewModels. Регистры просмотров в сервисе и ViewModels могут запрашивать диалоги из службы. Это пример шаблона медиатора Gang of Four .

Ответ 3

Пожалуйста, см. мой ответ на этот вопрос о том, почему класс Window является ViewModel, поэтому вы можете использовать его непосредственно из ViewModel без проблем.

Ответ 4

Лоран Бугнион имеет посредника с слабой ссылкой, в котором он использует его для отображения диалоговых сообщений. Наряду с сообщением, которое передается, делегат обратного вызова отправляется для выполнения подписчиком. Вы можете использовать ту же концепцию, чтобы показать диалог. Откроется диалоговое окно DialogMessage.cs из источника здесь.

Ответ 5

Мы используем классы контроллера, которые отвечают за рабочий процесс пользовательского интерфейса. Они создают модальные окна, и они посредничают между различными ViewModels.

Как вы можете открыть модальное окно с шаблоном View-Model-ViewModel (MVVM), показано здесь в примере приложения ViewModel:

WPF Application Framework (WAF)

http://waf.codeplex.com