Как использовать Messageboxes в MVVM?

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

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

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

7
задан razlebe 6 December 2011 в 17:36
поделиться

5 ответов

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

0
ответ дан 7 December 2019 в 09:57
поделиться

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

1
ответ дан 7 December 2019 в 09:57
поделиться

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

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

}

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

private IMessageBoxProvider MessageBox { get; set; }

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

2
ответ дан 7 December 2019 в 09:57
поделиться

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

1
ответ дан 7 December 2019 в 09:57
поделиться
У

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

2
ответ дан 7 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: