我有一个数据绑定WPF CheckBox控件,当UI中的值被切换时,它似乎正在吃掉相应属性setter抛出的异常。我知道如果我在Binding实例上提供ExceptionValidationRule会发生这种情况,但我仔细检查了Binding实例的ValidationRules是否为零。我还检查了调用堆栈以介入异常处理程序,但不存在。尽管如此,抛出的异常并未冒泡到顶部并在应用程序中产生崩溃,正如我所料。
如果我从同一UI中的按钮单击处理程序抛出异常,则异常会冒泡并导致应用程序崩溃,排除某种全局异常处理程序。
有什么想法吗?
谢谢!
答案 0 :(得分:3)
要添加到itowlson的答案,Binding
类提供UpdateSourceExceptionFilter属性,它允许您提供在更新源时发生异常时运行的逻辑。它与ExceptionValidationRule类一起使用,并允许您在更新失败时添加ValidationError
以外的其他操作。
答案 1 :(得分:2)
不,这是预期的行为:WPF数据绑定基础结构捕获将绑定目标中的值保存回源所导致的异常。我怀疑这是因为应用程序无法围绕保存操作设置异常处理程序(因为它是从WPF代码而不是从应用程序代码调用的),因此如果WPF没有这样做,应用程序将崩溃而不会处理异常的机会。
(相比之下,在一个按钮点击处理程序中,您正在编写代码,以便做有机会处理异常。因此,如果您决定不这样做,WPF认为可以让异常传播处理它。)