当嵌套实现INotifyPropertyChanged的属性时,父对象传播必须改变吗?

Phi*_*hil 19 .net inotifypropertychanged

这个问题将表明我在实现/使用INotifyPropertyChanged时缺乏对预期行为的理解:

问题是 - 为了使绑定按预期工作,当你有一个本身实现INotifyPropertyChanged的类时,它具有类型为INotifyPropertyChanged的嵌套属性你是否希望在内部订阅这些属性的更改通知然后传播通知?或者预期绑定基础设施是否具备使其变得不必要的智能?

例如(注意这段代码不完整 - 只是为了说明问题):

   public class Address : INotifyPropertyChanged
    {
       string m_street
       string m_city;

       public string Street
       {
          get { return m_street; }
          set
          {
             m_street = value;
             NotifyPropertyChanged(new PropertyChangedEventArgs("Street"));
          }
       }

       public string City
       {
          get { return m_city; }
          set 
          {
             m_city = value;
             NotifyPropertyChanged(new PropertyChangedEventArgs("City"));
          }
       }

    public class Person : INotifyPropertyChanged
    {
       Address m_address;

       public Address
       {
          get { return m_address = value; }
          set
          {
             m_address = value;
             NotifyPropertyChanged(new PropertyChangedEventArgs("Address"));
          }
       }
    }
Run Code Online (Sandbox Code Playgroud)

因此,在这个例子中,我们在Person对象中有一个嵌套的Address对象.两者都实现了INotifyPropertyChanged,以便更改其属性将导致向订阅者传输属性更改通知.

但是,假设使用绑定某人订阅了对Person对象的更改通知,并且正在"监听"对Address属性的更改.如果地址财产本身的变化(不同的地址对象被分配),但如果通过嵌套的地址对象(城市或街道)包含的数据被更改将不会收到通知,他们就会收到通知.

这导致了一个问题 - 期望处理此问题的绑定基础结构,还是我应该在Person的实现中订阅地址对象上的更改通知,然后将它们作为"地址"的更改传播?

如果你达到这一点,感谢您花时间阅读这个冗长的问题?

P.K*_*P.K 1

当你说时你回答了这个问题

...假设使用绑定某人正在订阅 Person 对象上的更改通知,

有人正在订阅 Person 并且无法知道 Address 是否已更改。所以你必须自己处理这种情况(这很容易实现)。