我有一個Person類:實施INotifyPropertyChanged的嵌套性
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 />
這兩個值都顯示在文本框中,當視圖加載時就ok了。
對第一個文本框的更改將在MyViewModel中觸發OnPropertyChanged("Person")
。大。
對第二個文本框("Person.Address.StreetOne")
的更改不會在MyViewModel中激發OnPropertyChanged("Person")
。這意味着它不會調用Person對象的SET方法。不是很好。有趣的是,Address類中的StreetOne的SET方法被調用。
當Person.Address.StreetOne
被更改時,如何獲得ViewModel中的Person對象的SET方法?
我是否需要將我的數據變平,以便SteetOne在Person內而不是Address?
謝謝!
@相關...關於你的恩惠問題已經回答了。那麼你在這裏尋找什麼樣的答案? – 2016-03-10 12:20:15
@ S.Akbari:接受的答案是一種解決方法,它將財產壓平。我正在尋找一個真正的解決方案 – Revious 2016-03-10 13:28:27
@Revious我使用標準的替代方法添加了一個答案,即使用事件處理程序將更改從子項傳播到父項。我不確定這在最初的答案中是如何被忽略的,因爲它是相當標準和「真正」的解決方案。 – 2016-03-11 17:09:54