Открытие окна about с использованием шаблона MVVM - PullRequest
10 голосов
/ 25 августа 2009

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

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

Это поражает меня как зернистость паттерна MVVM.

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

Есть рекомендации?

Ответы [ 5 ]

7 голосов
/ 25 августа 2009

Один из способов справиться с этим - реализовать службу, предоставляющую представления для моделей представления. Представления регистрируются в сервисе, а ViewModels может запрашивать диалоги из сервиса. Это пример паттерна Банды Четырех .

1 голос
/ 22 января 2010

Взгляните на мое решение Modal Dialogs для Silverlight 4:

Модальные диалоги с MVVM и Silverlight 4

0 голосов
/ 29 августа 2009

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

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

WPF Application Framework (WAF)

http://waf.codeplex.com

0 голосов
/ 25 августа 2009

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

0 голосов
/ 25 августа 2009

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

...