如何知道我的DependencyProperty是否设置为NULL?

时间:2014-01-14 14:17:08

标签: c# wpf

我有一个带有多个DependencyProperties的WPF用户控件。

如果用户将“null”绑定到我的某个DependencyProperties,我希望能够执行某些操作,例如将值更改为有效的值。

问题是my属性的默认值是NULL,当它们为该属性设置NULL时,OnPropertyChanged不会触发。

除了将我的属性的默认值更改为除NULL以外的其他内容之外,有没有办法实现我想要的?我需要创建一些“模拟”值来设置为默认值

3 个答案:

答案 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验证回调