如何捕获由数据绑定控件触发的异常

本文关键字:异常 控件 何捕获 数据绑定 | 更新日期: 2023-09-27 18:29:18

我有一个数据绑定的NumericUpDown控件,绑定如下:

Binding b = new Binding("Value", myDataSource, "myProperty");
b.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
numericUpDown.DataBindings.Add(b);

更改myProperty会产生一些进一步的影响,并且可能会在更远的地方引发异常。

检查是否会引发异常所需的一些信息在GUI中不可用,因此验证输入很困难。我可以捕获由我的DataBinding所做的值更改触发的异常吗?或者这是一个糟糕的设计?如果是这样,我应该提供所有必要的信息以正确验证输入,还是不应该使用DataBinding进行复杂的更改?

如果有任何帮助,我将不胜感激!

richn

如何捕获由数据绑定控件触发的异常

当绑定值更改导致异常时,您会发现有时绑定会吞噬它。

为了达到这个目的,您可以挂接绑定的BindingComplete事件(您可能还需要将绑定设置为FormattingEnabled为true)。此时,在绑定写入数据源时捕获的任何异常都将在事件参数(其Exception属性)上冒泡。不幸的是,您可能会发现大部分堆栈跟踪都丢失了。。。

EDIT:如果使用BindingSource组件,它还会对BindingComplete事件进行气泡处理。因此,这可能是捕获其他绑定抛出的异常的更快方法。

数据绑定不应针对复杂属性。

检索和设置属性时应进行验证。