Ian*_*ory 13 .net c# wpf exception-handling mvvm
我有一个使用MV-VM方法编写的应用程序.
数据访问在模型中完成.如果此处发生致命错误(例如,与数据源的连接丢失),则抛出异常.此异常冒泡到ViewModel.
但是,因为数据访问的原始触发器是数据绑定,WPF会吞下此异常(当应用程序在调试器下运行时,它仅记录在输出窗口中).
我宁愿这个异常仍然未处理,所以我的应用程序范围的未处理异常处理程序可以拾取它,记录它并优雅地退出.我怎样才能做到这一点?
您可以在调度程序上对异常抛出操作进行排队.
// 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 "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
最近遇到了一种以全球方式解决吞噬异常问题的方法.
创建自定义绑定类并重写UpdateSourceExceptionFilter - 请参阅此线程中的示例.
不幸的是,这只是WPF 4.0而不是SL 4.0.