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 />
当视图加载时,两个值在文本框中都可以显示。
更改第一个文本框将在MyViewModel中触发OnPropertyChanged("Person")
。太好了。
更改第二个文本框 ("Person.Address.StreetOne")
不会在MyViewModel中触发 OnPropertyChanged("Person")
。这意味着它不会调用Person对象的SET方法。有趣的是,在Address类中StreetOne的SET方法被调用。
如何在更改Person.Address.StreetOne
时使位于ViewModel中的Person对象的SET方法得到调用?
我需要展开我的数据,使StreetOne位于Person而不是Address中吗?
谢谢!