我有一个 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
}
我有一个地址类:
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 中触发。伟大的。
对第二个文本框的更改("Person.Address.StreetOne")
不会OnPropertyChanged( "Person" )
在 MyViewModel 中触发。这意味着它不调用 Person 对象的 SET 方法。不是很好。有趣的是,Address 类中 StreetOne 的 SET 方法被调用了。
如何获取 ViewModel 中 Person 对象的 SET 方法,以便在Person.Address.StreetOne
更改时调用???
我是否需要展平我的数据,以便 SteetOne 在 Person 而不是 Address?
谢谢!