处理ViewModel / Model中的致命异常

时间:2010-03-01 02:43:20

标签: c# .net wpf mvvm exception-handling

我有一个使用M-V-VM方法编写的应用程序。

数据访问在模型中完成。如果此处发生致命错误(例如,与数据源的连接丢失),则抛出异常。此异常冒泡到ViewModel。

但是,由于数据访问的原始触发器是数据绑定,因此WPF会吞下此异常(只有在调试器下运行应用程序时才会将其记录在输出窗口中。)

我宁愿这个异常仍然未处理,所以我的应用程序范围的未处理异常处理程序可以拾取它,记录它并优雅地退出。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:8)

您可以在调度程序上排除异常抛出操作。

    // 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 "";
            }
        }
    }

答案 1 :(得分:6)

最近以全球方式遇到了吞噬异常问题的a way of getting

创建自定义绑定类并覆盖UpdateSourceExceptionFilter - 请参阅此主题中的示例。

不幸的是,这只是WPF 4.0而不是SL 4.0。