ObservableCollection
元に戻す/やり直し機能でオーバーライドしたいのです
が、まだ-1であるため、OldItemのIndexOfを取得するにはどうすればよいですか?
CollectionChanging()以外の実装があるようです
ObservableCollection
元に戻す/やり直し機能でオーバーライドしたいのです
が、まだ-1であるため、OldItemのIndexOfを取得するにはどうすればよいですか?
CollectionChanging()以外の実装があるようです
削除操作では、の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
私にとっての解決策の1つは、データ用に別のリストをObservableCollection<int>
保持し、シーケンスインデックスを保持させることです。これにより、データが大幅に軽量化されます。をList<ObservableCollection<int>>
履歴キャッシュとして使用し、リスト内の現在の位置を動的に更新できます(これをナビゲーション履歴と見なします)。これはパフォーマンス要件に依存することに注意してください。データが非常に長い場合、これは問題があり、そうでない場合は実装が簡単です。