[英]Raise CollectionChanged in ObservableCollection when an item's property is modified
[英]Throw CollectionChanged of ObservableCollection when nested Property changes
當嵌套元素更改並且我需要知道它時,如何通知ObservableCollection<Book>
?
也許“ ObservableCollection<Book>
”和“ Book
”具有成員“ Chapter
”。 並且“章節”有一個名為“ Name
”的字符串屬性,並且我更改了名稱值。 當名稱Name->Chapter -> Book -> ObservableCollection<Book>
屬性“名稱”更改時,如何拋出ObservableCollection的CollectionChanged?
是MVVM中通過manuell隧道傳輸它的常用方法,以便在激發PropertyChange時激發CollectionChanged?
謝謝 :)
更新:我在這篇文章中找到了一個解決方案: ObservableCollection沒有注意到其中的Item發生更改(即使使用INotifyPropertyChanged)
->從帖子中使用綁定列表或某種TrulyObservableCollection,因為ObservableCollection不會像我已經提到的那樣傳遞項目通知! ObservableCollection和BindingList之間的區別
->如果您使用BindingList,請記住這篇文章的缺點http://www.themissingdocs.net/wordpress/?p=465
過去我也遇到過類似的問題。 這是由於我使用嵌套屬性和缺少通知傳播引起的。
我通過在每次對象更改時都訂閱PropertyChanged事件來解決該問題。 這樣,當嵌套屬性更新時,我可以更新我的收藏集。
確保每個簡單類型(例如,您的Name
屬性)實現OnPropertyChanged,然后確保每個復雜類型(例如,您的Book
和Chapter
屬性)都實現通知傳播。
您的可觀測集合應相應更新。
例:
private Book _book;
public Book Book
{
get
{
return _book;
}
set
{
if (value == _book|| value == null)
return;
if (_book!= null)
_book.PropertyChanged -= BookPropertyChanged;
_book= value;
_book.PropertyChanged += BookPropertyChanged;
UpdateProperties();
}
}
更新方法:
private void BookPropertyChanged(object sender, PropertyChangedEventArgs args)
{
OnPropertyChanged(string.Empty);
}
public void UpdateProperties()
{
OnPropertyChanged(string.Empty);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.