我有一个带有多个DependencyProperties的WPF用户控件。
如果用户将“null”绑定到我的某个DependencyProperties,我希望能够执行某些操作,例如将值更改为有效的值。
问题是my属性的默认值是NULL,当它们为该属性设置NULL时,OnPropertyChanged不会触发。
除了将我的属性的默认值更改为除NULL以外的其他内容之外,有没有办法实现我想要的?我需要创建一些“模拟”值来设置为默认值
答案 0 :(得分:6)
您可以在注册CoerceValueCallback
时指定DependencyProperty
,并在看到null
的基值时使用它来替换有效值。默认值不会传递到CoerceValueCallback
,因此这是将null
区分为默认值或用户值的唯一选项。
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register(
"MyProperty",
typeof(object),
typeof(OwnerType),
new PropertyMetadata(default(object), null, CoerceMyProperty));
private static object CoerceMyProperty(DependencyObject d, object baseValue)
{
if (baseValue == null)
return SomeAlternateValue;
return baseValue;
}
如果您从未分配MyProperty
,您将看到永远不会调用CoerceMyProperty
,但您的控件实例将具有默认值(null
)。另外,给定以下两行,将为第一行调用CoerceMyProperty
,而不是第二行调用this.MyProperty = null;
this.ClearValue(MyPropertyProperty);
:(恢复为默认值):
{{1}}
答案 1 :(得分:0)
听起来您试图区分默认值和显式用户值,但两个值都相同:null
。这是不可能的,因为事件是基于值的,如果值没有改变,事件将不会触发。听起来你应该考虑选择一个不同于null
的默认值。这将允许您区分两种状态
答案 2 :(得分:0)
您可以尝试DependencyProperty.Register验证回调