私は 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
}
私はビューモデルを持っています:
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 />
ビューが読み込まれると、両方の値がテキスト ボックスに表示されます。
最初のテキスト ボックスへの変更はOnPropertyChanged( "Person" )
、MyViewModel で発生します。偉大な。
2 番目のテキスト ボックスへの変更は、MyViewModel 内で("Person.Address.StreetOne")
は発生しません。OnPropertyChanged( "Person" )
Person オブジェクトの SET メソッドを呼び出さないことを意味します。良くない。興味深いことに、Address クラス内の StreetOne の SET メソッドが呼び出されます。
ViewModel 内の Person オブジェクトの SET メソッドが変更されたときに呼び出されるようにするにはどうすればよいですPerson.Address.StreetOne
か?
SteetOne が Address ではなく Person 内にあるように、データを平坦化する必要がありますか??
ありがとう!