依赖属性如何运作?

时间:2010-10-13 08:38:05

标签: c# wpf dependency-properties

我有下一个依赖属性:

    public static DependencyProperty RequestObjectProperty = DependencyProperty.Register("RequestObject", typeof(RegistrationCardSearch), typeof(RegCardSearchForm),new UIPropertyMetadata(Changed));

    private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MessageBox.Show("Property Changed!!!");
    }
    public RegistrationCardSearch RequestObject
    {
        get
        {
            return (RegistrationCardSearch)GetValue(RequestObjectProperty);
        }
        set
        {
            SetValue(RequestObjectProperty, value);
        }
    }

和“已更改”我的依赖项属性更改时必须触发的方法。我的房产类型是 RegistrashionCardSearch (类)。当我在依赖属性中更改类的属性值时,属性更改回调未被触发。为什么??我的 RegistrashionCardSearch 类实现了INotifePropertyChanged接口

2 个答案:

答案 0 :(得分:3)

只有在属性本身更改时才会触发更改的事件,而不是在更改此属性中的值时触发。给出一个会导致更改事件触发的示例:

var requestObject = myObject.RequestObject;
myObject.RequestObject = new RegistrationCardSearch() { ... };

更改的事件将触发此示例的最后一行,因为属性本​​身会更改为另一个值。

然而,当你做这样的事情时:

myObject.RequestObject.SomeProperty = newPropertyValue;

更改的事件不会触发,因为您没有更改RequestObject属性本身,只是属性中的某个值。

答案 1 :(得分:1)

Ronald已经很好地解释了为什么你的方法不起作用。要使其发挥作用,您需要订阅PropertyChanged的{​​{1}}事件:

RequestObject