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