MVVM Исключительная обработка - PullRequest
9 голосов
/ 26 августа 2009

У меня есть приложение WPF, которое я пытался написать в стиле MVVM. Если выдается исключение (например, когда документ открыт), я хотел бы отобразить MessageBox. Это легко сделать, но мой код кажется не совсем правильным, потому что вызов MessageBox.Show находится в ModelView. Я думал, что подобные вещи должны жить в View, но я не должен помещать код в View.

Таким образом, вопрос действительно может быть сведен к Каков предлагаемый способ отображения MessageBox в MVVM?

Ответы [ 3 ]

17 голосов
/ 26 августа 2009

Воспользуйтесь услугой:

public void SomeMethodInYourViewModel()
{
    try
    {
        DoSomethingDangerous();
    }
    catch (Exception ex)
    {
        ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
    }
}

Теперь вы отключили виртуальные машины от представления сообщений. Вы даже можете вообще не использовать стандартные (некрасивые) окна сообщений, и это не повлияет на ваши виртуальные машины.

9 голосов
/ 27 августа 2009

Взгляните на превосходный фонд Джоша Смита MVVM на Codeplex . В частности, взгляните на класс Messenger, упрощенный способ передачи сообщений между различными объектами ViewModel, которым не нужно знать друг друга.

Кроме того, я не верю, что существует жесткое правило «Нет кода в представлении», хотя лучше по возможности его избегать ... помните, что ваш XAML - это просто код .net, написанный на декларативный синтаксис; код-это просто C # или VB.net, чтобы дополнить это (если это абсолютно необходимо!)

2 голосов
/ 09 октября 2010

Вы также можете просто добавить строковое свойство ErrorMessage в свой класс ViewModel, к которому может привязываться View.

...