Как использовать Messageboxes в MVVM? - PullRequest
7 голосов
/ 21 мая 2010

Кажется, что XAML в шаблоне MVVM имеет трудности с отображением окна сообщений. Мой клиент настаивает на том, что проверочные ярлыки и цвета не подходят для них. Они по-прежнему хотят сообщение. Как это можно сделать?

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

Есть ли хороший способ сделать это в XAML? Мой клиент любит почтовые ящики. Она не заботится о шаблоне MVVM, у нее никогда не было проблем с качеством до использования MVVM и модульного тестирования. Но теперь она не может даже получить свои почтовые ящики, поэтому она не очень счастлива.

Ответы [ 5 ]

2 голосов
/ 07 июня 2010

Джош Смит также имеет статью CodeProject, которая может вас заинтересовать здесь .

2 голосов
/ 21 мая 2010

Одна из возможностей - использовать интерфейс для окна сообщений, например

public interface IMessageBoxProvider
{
    MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult);

}

и класс-оболочка, который реализует этот интерфейс и использует обычное или настраиваемое окно сообщения. В viewmodel вы можете использовать как это

private IMessageBoxProvider MessageBox { get; set; }

где MessageBox - класс-оболочка. Итак, теперь вы отсоединили фактическое окно сообщения и теперь можете проводить модульное тестирование, а что нет.

1 голос
/ 29 мая 2010

Пример приложения ViewModel проекта WPF Application Framework (WAF) показывает, как отобразить MessageBox без нарушения шаблона MVVM.

1 голос
/ 21 мая 2010

В вашей ViewModel может быть событие PopUpNotificationRequested, которое будет обрабатываться представлением для отображения окон сообщений. Таким образом, логика отображения окна сообщения остается в модели представления, но все еще не связана с представлением.

0 голосов
/ 21 мая 2010

Я столкнулся с этой проблемой несколько недель назад. Я наткнулся на эту статью (http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/)) и, по сути, следовал очень похожему процессу показа модальных диалогов с шаблоном MVVM. Для тестирования моих моделей ViewModels просто создайте фиктивный сервис модальных диалогов. Надеюсь, это вам тоже поможет.

...