У меня есть класс 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 был внутри человека, а не адреса??
Спасибо!