Обработка исключений MVVM

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

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

3 ответов


использовать сервис:

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

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


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

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


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