我如何从ObservableCollection获得IndexOf删除项目

本文关键字:获得 IndexOf 删除项目 ObservableCollection | 更新日期: 2023-09-27 18:05:51

我想用撤销/重做功能覆盖我的ObservableCollection
但我如何获得IndexOf的OldItem,因为它仍然是-1

并且看起来好像没有CollectionChanging()实现

我如何从ObservableCollection获得IndexOf删除项目

在移除操作中,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

我的一个解决方案是为您的数据保留一个单独的列表,并让ObservableCollection<int>保留序列索引,这将使其权重更轻。您可以使用List<ObservableCollection<int>>作为历史缓存,并动态更新列表中的当前位置(将其视为导航历史)。请注意,这取决于您的性能需求,如果您的数据非常长,这是有问题的,否则更容易实现。