我有一个使用M-V-VM方法编写的应用程序。
数据访问在模型中完成。如果此处发生致命错误(例如,与数据源的连接丢失),则抛出异常。此异常冒泡到ViewModel。
但是,由于数据访问的原始触发器是数据绑定,因此WPF会吞下此异常(只有在调试器下运行应用程序时才会将其记录在输出窗口中。)
我宁愿这个异常仍然未处理,所以我的应用程序范围的未处理异常处理程序可以拾取它,记录它并优雅地退出。我怎样才能做到这一点?
答案 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。