Реализация INotifyPropertyChanged для вложенных свойств

У меня есть класс Person:

public class Person : INotifyPropertyChanged
{
     private string _name;
     public string Name{
     get { return _name; }
     set {
           if ( _name != value ) {
             _name = value;
             OnPropertyChanged( "Name" );
           }
     }

     private Address _primaryAddress;
     public Address PrimaryAddress {
     get { return _primaryAddress; }
     set {
           if ( _primaryAddress != value ) {
             _primaryAddress = value;
             OnPropertyChanged( "PrimaryAddress" );
           }
     }

     //OnPropertyChanged code goes here
}

У меня есть класс Address:

public class Address : INotifyPropertyChanged
{
     private string _streetone;
     public string StreetOne{
     get { return _streetone; }
     set {
           if ( _streetone != value ) {
             _streetone = value;
             OnPropertyChanged( "StreetOne" );
           }
     }

     //Other fields here

     //OnPropertyChanged code goes here
}

У меня есть ViewModel:

public class MyViewModel
{
   //constructor and other stuff here

     private Person _person;
     public Person Person{
     get { return _person; }
     set {
           if ( _person != value ) {
             _person = value;
             OnPropertyChanged( "Person" );
           }
     }

}

У меня есть представление со следующими строками:

<TextBox  Text="{Binding Person.Name, Mode=TwoWay,   
    UpdateSourceTrigger=PropertyChanged />

<TextBox  Text="{Binding Person.Address.StreetOne, Mode=TwoWay,   
    UpdateSourceTrigger=PropertyChanged />

Оба значения отображаются в текстовом поле ok при загрузке представления.

Изменения в первом текстовом поле сработают OnPropertyChanged( "Person" )в MyViewModel. Отлично.

Изменения во втором текстовом поле ("Person.Address.StreetOne")НЕ срабатывают OnPropertyChanged( "Person" )внутри MyViewModel. Это означает, что он не вызывает метод SET объекта Person. Не хорошо. Интересно, что вызывается метод SET StreetOne внутри класса Address.

Как мне вызвать метод SET объекта Person внутри ViewModel при изменении Person.Address.StreetOne???

Нужно ли мне выравнивать мои данные, чтобы SteetOne был внутри человека, а не адреса??

Спасибо!

15
задан Taterhead 12 March 2016 в 19:56
поделиться