簡體   English   中英

的ObservableCollection <T> CollectionChanged事件

[英]ObservableCollection<T> CollectionChanged event

我有一個可觀察的集合,我有一個collectionChanged事件。 我將其項目綁定到UI中的列表框。 當用戶從列表框中刪除UI中的某些項目時,CollectioChanged會被正確觸發,但是,我需要知道已刪除的項目的索引。 問題是我在更改后無法對集合進行indexOf,因為它不再具有已刪除的項目..

我們可以訪問從collectionschanged事件中從ObservableCollection中刪除的索引列表嗎?

CollectionChanged事件使用一個事件,該事件為您提供NotifyCollectionChangedEventArgs 它有一個OldStartingIndex屬性,它將告訴你它被刪除的索引。 例如:

void Foo()
{
    ObservableCollection<string> r = new ObservableCollection<string>();
    r.CollectionChanged += r_CollectionChanged;
}

static void r_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    var itemRemovedAtIndex = e.OldStartingIndex;
}

假設我正在從不同索引的集合中刪除MULTIPLE項目。因此使用oldStartingIndex只會給我刪除的第一個項目索引

該事件很可能會多次觸發,每個項目一次。

是。 NotifyCollectionChangedEventArgs中的OldStartingIndex是從中刪除項目的索引。

事件參數e具有屬性OldItemsOldStartingIndex 可能這有幫助嗎?

您似乎認為可以通過單個方法調用從ObservableCollection刪除多個項目。 這是不可能的。 您必須調用RemoveRemoveAtRemoveItem並且所有這些僅從集合中刪除單個元素。 這意味着每次從集合中刪除項時,remove事件將觸發, OldStartingIndexOldItems將包含對已刪除的一個項的索引的引用以及該一個項的單個元素數組。

您已經注意到,您無法使用OldStartingIndex在集合中進行查找,因為它已被刪除。 如果您需要訪問原始引用的項目,可以使用OldItems並獲取第一個元素。

我沒有使用ObservableCollection但我看到一次刪除多個元素的唯一方法是調用ClearClearItems 如果這些觸發了更改的事件,那么我會想象OldStartingIndex將為0而OldItems將包含對先前在集合中的所有元素的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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