Где я могу поймать исключения в MVVM? - PullRequest
29 голосов
/ 19 ноября 2010

В моем классе моделей представлений есть метод (не уверенный, является ли это хорошей практикой или модели представлений должны быть строго механизмами изменения свойств и свойств), который подключается к службе.Конечно, я хочу обрабатывать любые возможные исключения WCF при подключении или отключении.

Давайте использовать конечную точку, не найденную в качестве примера, учитывая, что это исключение, которое я хотел бы обратить внимание пользователя.Рассмотрим пример грубого кода:

public void Connect()
{
    ServiceClient proxy = null;
    try
    {
        proxy = new ServiceClient();
        proxy.Subscribe();
        // ...
    }
    catch(EndpointNotFoundException)
    {
        // should I do something here?
    }
    // .. other WCF related exception catches and a finally
}

Считается ли хорошей практикой вызывать System.Windows.MessageBox.Show () непосредственно внутри перехвата, или мне следует повторно вызвать исключение, чтобы создать еще один уровень моего приложения WPFловит это?Если так, то где идеальное место, чтобы поймать такое исключение?

1 Ответ

33 голосов
/ 19 ноября 2010

Я обрабатывал исключения в своем 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 как последнее средство.Зачем отказываться от богатого контроля над пользовательским интерфейсом в пользу этой старой вещи?Говоря об этом, вот другой подход к реализации всплывающих окон .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...