Я обрабатывал исключения в своем MVVM-клиенте, перехватывая их и заключая в свойство ErrorViewModel
того, что ViewModel
перехватило исключение.
Допустим, ViewModel A перехватывает исключение EndpointNotFoundException.Чтобы отобразить эту ошибку, я обертываю исключение в ErrorViewModel и назначаю его свойству Error A .
Представление, связанное с A , содержит ContentControl
, привязанное к A свойству Error.Между тем я использую DataTemplate
, чтобы связать представление ошибок с ErrorViewModel.В этом представлении Visibility
определяется тем, содержит или нет свойство Error A исключение.
Итак, A View содержит сообщение об ошибке View, которое появляется только при обнаружении исключения и может быть отклонено пользователем (кнопка OK в сообщении об ошибке Viewвызывает A команду, которая очищает свойство Error A , тем самым изменяя видимость представления сообщения об ошибке на Collapsed
).
Пока что это кажетсябыть хорошим подходом, который сохраняет правильную развязку MVVM.
Надеюсь, это поможет.Так или иначе, честно говоря, я бы рассматривал System.Windows.MessageBox.Show()
в приложении WPF как последнее средство.Зачем отказываться от богатого контроля над пользовательским интерфейсом в пользу этой старой вещи?Говоря об этом, вот другой подход к реализации всплывающих окон .