1

ObservableCollection元に戻す/やり直し機能でオーバーライドしたいのです
が、まだ-1であるため、OldItemのIndexOfを取得するにはどうすればよいですか?

CollectionChanging()以外の実装があるようです

4

2 に答える 2

4

削除操作では、のOldStartingIndexプロパティは、削除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
于 2013-03-25T16:07:26.197 に答える
0

私にとっての解決策の1つは、データ用に別のリストをObservableCollection<int>保持し、シーケンスインデックスを保持させることです。これにより、データが大幅に軽量化されます。をList<ObservableCollection<int>>履歴キャッシュとして使用し、リスト内の現在の位置を動的に更新できます(これをナビゲーション履歴と見なします)。これはパフォーマンス要件に依存することに注意してください。データが非常に長い場合、これは問題があり、そうでない場合は実装が簡単です。

于 2013-03-25T16:07:34.923 に答える