2013-03-25 77 views
1

我要重寫我的ObservableCollection與撤銷/重做功能的IndexOf移走物品
但我如何得到的IndexOf的OldItem,因爲它仍然是-1我怎麼得到的ObservableCollection

,它看起來像有是非CollectionChanging()實現

回答

3

在刪除操作中,NotifyCollectionChangeEventArgsOldStartingIndex屬性將告訴您在刪除集合之前在集合中保留的項目的索引。

例如

var col = new ObservableCollection<string>(); 
col.Add("hello"); 
col.Add("world"); 
col.CollectionChanged += (sender, e) => Console.WriteLine(e.OldStartingIndex); 
col.RemoveAt(1); 
col.RemoveAt(0); 

這將打印出

1 
0 
0

一個解決方案,我是讓你的數據的單獨列表,讓ObservableCollection<int>保持序列索引,這將使它重量輕。您可以將List<ObservableCollection<int>>作爲歷史緩存,並動態更新列表中的當前位置(將其視爲導航歷史記錄)。請注意,這取決於你的性能要求,如果你的數據非常冗長,這是有問題的,而且這很容易實現。