处理ViewModel / Model中的致命exception

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

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

但是,由于数据访问的原始触发器是数据绑定,因此WPF会吞下此exception(当应用程序在调试器下运行时,它仅记录在输出窗口中)。

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

您可以在调度程序上对exception抛出操作进行排队。

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

最近遇到了一种以全球方式解决吞噬exception问题的方法。

创建自定义绑定类并重写UpdateSourceExceptionFilter – 请参阅此线程中的示例。

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