У меня есть приложение WPF, которое я пытаюсь написать в стиле MVVM. Если возникает исключение (например, при открытии документа), я хотел бы отобразить MessageBox. Это легко сделать, но мой код кажется не совсем правильным, потому что вызов MessageBox.Show находится в ModelView. Я думал, что такие вещи должны жить в представлении, но я не должен помещать код в представление.
Таким образом, вопрос действительно можно свести к каков предлагаемый способ отображения MessageBox в MVVM?
Ответ 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, чтобы дополнить это (если это абсолютно необходимо!)