Обработка исключений 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, к которому может привязываться ваше представление.