为无效值准备依赖项属性

时间:2017-03-11 14:57:03

标签: c# wpf dependency-properties

我创建的UserControl提供的dependency properties很少。其中一个的值是int。现在,用户已将null作为值提供,并且抛出了异常:

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='<null>' ...

哪种行为是有效的(WPF我相信?)。但是我想为这样的事件准备我的UserControl。我的意思是,如果绑定提供无效值,我想捕获它并提供我的默认值,因此不会抛出exceptin。

如何实现这一目标?我已尝试使用DependencyPropertyChangedCallbackCoerceValueCallbackValidateValueCallback回调,但似乎没有人收到此值。

2 个答案:

答案 0 :(得分:1)

您无法将int属性设置为int以外的任何值,因此UserControl中的依赖项属性实际上从未被调用过,并且没有任何内容UserControl可以做到这一点,因为属性永远不会被设置。

包括UserControl在内的任何类的使用者都有责任将属性设置为属性类型的值。

在这种情况下,当WPF运行时尝试将int属性设置为不表示有效整数的值时(例如null),会发生错误。< / p>

您可以做的是在值转换发生之前使用ValidationRule执行某些操作,并在转换失败时向用户显示错误消息:

How do I handle DependencyProperty overflow situations?

另一个选项可能是将依赖项属性的类型更改为Nullable<int>int?)。然后,您将能够将其设置为任何有效的整数值以及null

答案 1 :(得分:0)

在绑定到DependencyProperty的绑定中,您可以设置NullValue和FallbackValue。 有点喜欢。

 <TextBlock  Text="{Binding SomeProperty, FallbackValue='Null not suported', TargetNullValue={x:Null}}"/>