Обработка фатальных исключений в ViewModel / Model - PullRequest
13 голосов
/ 01 марта 2010

У меня есть приложение, написанное с использованием подхода M-V-VM.

Доступ к данным осуществляется в модели. Если здесь происходит фатальная ошибка (например, соединение с источником данных потеряно), и генерируется исключение. Это исключение всплывает до ViewModel.

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

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

Ответы [ 2 ]

8 голосов
/ 01 марта 2010

Вы можете поставить в очередь исключающее действие на диспетчере.

    // This property is connected to the window using databinding
    public string ExceptionThrowingBoundedField
    {
        get
        {

            try
            {
                // This function might throw an exception
                return GetValueFromDatabase();               
            }
            catch (Exception ex)
            {
                ApplicationException exWrapper = new ApplicationException(
                    "Wrapped Exception",                                                     
                     ex
                );
                Action throwException = () => { throw exWrapper; };
                Dispatcher.CurrentDispatcher.BeginInvoke(throwException);
                return "";
            }
        }
    }
6 голосов
/ 14 октября 2010

Недавно попался способ обойти вокруг проблемы проглоченного исключения в глобальном масштабе.

Создайте пользовательский класс привязки и переопределите UpdateSourceExceptionFilter - см. Пример в этой теме.

К сожалению, это просто WPF 4.0, а не SL 4.0.

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