簡體   English   中英

嵌套屬性更改時,拋出ObservableCollection的CollectionChanged

[英]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,然后確保每個復雜類型(例如,您的BookChapter屬性)都實現通知傳播。

您的可觀測集合應相應更新。

例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM