2012-03-28 30 views
1

我有一个数据绑定NumericUpDown - 控制,势必是这样的:如何捕获由数据绑定控件触发的异常?

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

更改myProperty有一些进一步的影响,并可能某处抛出异常下降。

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

我将不胜感激任何帮助!

richn

+0

正如您所建议的那样,DataBinding不应该违反复杂的属性。检索和设置属性时应进行验证。 – 2012-03-29 08:22:14

+0

谢谢约翰。如果你写了一个,我会接受这个答案。 – richn 2012-03-30 14:12:32

回答

-1

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

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

+0

这是一个意见问题。绑定“复杂”属性(即UDT或枚举)对于减少样板代码的数量非常有用。 – 2013-11-27 16:25:32

+0

你误解了这个问题,这是潜在的问题。一个复杂的属性会有一个大的计算和例程,可能在数据绑定过程中产生异常。这应该避免 - 并且与该属性本身的类型无关。 – 2013-11-27 21:15:34

+0

这可能是,但作者所说的上/下数字并不是那么复杂。 – 2013-11-27 23:19:37

1

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

为了解决这个问题,您可以挂钩绑定的BindingComplete事件(您可能需要将绑定设置为FormattingEnabled也为真)。此时,在绑定写入数据源时捕获的任何异常将在事件参数上冒出(在Exception属性上)。美中不足的是,不幸的是,你可能会发现,堆栈跟踪的大部分是输了...

编辑:如果您使用的是BindingSource组件,它也泡BindingComplete事件。因此,这可能是捕获其他绑定引发的异常的更快捷方式。