У меня есть класс 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. Это означает, что он не вызывает метод объекта объекта Person. Не хорошо. Интересно, что вызывается метод SET StreetOne внутри класса Address.
Как получить метод SET объекта Person внутри ViewModel, который будет вызываться при изменении Person.Address.StreetOne
???
Нужно ли мне сглаживать мои данные, поэтому SteetOne находится внутри Person, а не Address?
Спасибо!