這個問題是要告訴我缺乏的預期行爲的理解執行時/使用INotifyPropertyChanged的:當實現INotifyPropertyChanged的嵌套屬性必須改變父對象傳播嗎?
的問題是 - 結合按預期方式工作,當你有它本身實現INotifyPropertyChanged一類,具有嵌套INotifyPropertyChanged類型的屬性是否需要內部訂閱以更改這些屬性的通知,然後傳播通知?或者,綁定基礎架構預計會有這麼多的智慧嗎?
例如(注意此代碼是不完整的 - 只是爲了說明問題):
public class Address : INotifyPropertyChanged
{
string m_street
string m_city;
public string Street
{
get { return m_street; }
set
{
m_street = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Street"));
}
}
public string City
{
get { return m_city; }
set
{
m_city = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("City"));
}
}
public class Person : INotifyPropertyChanged
{
Address m_address;
public Address
{
get { return m_address = value; }
set
{
m_address = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Address"));
}
}
}
因此,在這個例子中,我們已經有了一個Person對象嵌套地址對象。兩者都實現INotifyPropertyChanged,以便更改其屬性將導致將屬性更改通知傳輸給訂戶。
但讓我們假設使用綁定某人正在訂閱更改Person對象上的通知,並且正在偵聽Address屬性的更改。如果地址屬性本身發生更改(分配了不同的地址對象),它們將收到通知,但如果嵌套地址對象(城市或街道)包含的數據發生更改,則不會收到通知。
這導致了一個問題 - 綁定基礎架構是否期望處理此問題,還是應該在我的Person實現中訂閱更改地址對象上的通知,然後將它們作爲「Address」的更改傳播?
如果你明白了這一點,謝謝你只是花時間閱讀這個冗長的問題?
評論非常感謝!
菲爾
我在google搜索後發現了這個問題。對我來說,似乎你必須手動訂閱childrens PropertyChanged事件並將其泡泡到WPF綁定中。 – loraderon 2010-11-03 12:25:27
loraderon,我敢肯定情況並非如此 - 至少在我的測試中,事實證明是這樣的。而且,沒有任何信息(我已經找到)另有說明。你有任何可以提供的信息的鏈接嗎?謝謝。菲爾 – Phil 2010-11-03 20:56:06
我也沒有任何鏈接。在我目前的項目中,我不得不冒泡PropertyChanged事件來使其工作。我是WPF和MVVM的新手,所以它可能只是我的項目特別的東西。 – loraderon 2010-11-04 07:24:04