Dot-Net
為什麼 ObservableCollection 沒有 RemoveAll 方法?
為什麼
ObservableCollection沒有RemoveAll像 a 這樣的方法List?我已經實現了一個擴展方法來提供這個功能
ObservableCollection,但我想了解是否有特定的原因不提供這個功能。由於Collection 更改,它可能會以某種方式影響Data Binding嗎?這篇文章確實指定了一些在使用時可能出錯的事情,但沒有解決這個問題。
ObservableCollections
它確實有一種
Clear()方法可以刪除您可以使用的所有項目。如果我不得不冒險猜測他們為什麼使用
Clear而不是RemoveAll,我認為這是因為RemoveAll暗示您正在從集合中刪除項目,同時Clear告訴您這些項目只是被清除。這會
CollectionChanged導致引發的通知類型有所不同。Clear()引發NotifyCollectionChangedAction.Reset事件並且不包括事件中移除的項目,同時Remove引發NotifyCollectionChangedAction.Removed事件並將移除的項目傳遞給事件。您不能引發
CollectionChanged包含多個項目的事件,因此NotifyCollectionChangedAction.Removed在移除所有項目的情況下引發事件會引發異常。另一種方法是為每個被刪除的項目引發一個CollectionChanged事件,這可能對性能非常不利。NotifyCollectionChangedAction.Reset當使用者期望Removed在刪除項目時發生事件時,簡單地引發事件會導致一些混亂。所以我猜他們決定簡單地使用
.Clear()而不是.RemoveAll()因為這個名字更好地描述了幕後實際發生的事情。