我希望使用撤消/重做功能覆盖我的ObservableCollection
但我如何获得OldItem的IndexOf,因为它仍然是-1
看起来有非CollectionChanging()实现
答案 0 :(得分:3)
在删除操作中,OldStartingIndex
的{{1}}属性将告诉您项目在删除之前保留在集合中的索引。
例如
NotifyCollectionChangeEventArgs
这将打印出来
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)
对我来说,一个解决方案是为您的数据保留一个单独的列表,并让ObservableCollection<int>
保留序列索引,这将使其重量轻。您可以将List<ObservableCollection<int>>
作为历史记录缓存,并动态更新列表中的当前位置(将其视为导航历史记录)。请注意,这取决于您的性能要求,如果您的数据非常冗长,这是有问题的,而且这更容易实现。