我创建的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。
如何实现这一目标?我已尝试使用DependencyPropertyChangedCallback
,CoerceValueCallback
和ValidateValueCallback
回调,但似乎没有人收到此值。
答案 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}}"/>