Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Jake PearsonОтветов: 3

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

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

mvvmwpfmessagebox

Ответы

Ответ 1 · рейтинг 17 · Kent Boogaart

Воспользуйтесь сервисом:

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

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

Ответ 2 · рейтинг 9 · kiwipom

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

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

Ответ 3 · рейтинг 2 · Wayne Bloss

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы