System.Windows.Controls.TreeView から継承する「MultiSelectTreeView」と呼ばれるカスタム WPF コントロールに取り組んでいます。その目的は、複数選択とドラッグ アンド ドロップを可能にすることです。
この MultiSelectTreeView コントロールを含むビューの xaml は、基になるビュー モデルによって公開される ObservableCollection をバインドします。
ドラッグ アンド ドロップ操作には、ObservableCollection での多くの削除/追加 (または移動) 操作が含まれる可能性がありますが、1 回のドラッグ アンド ドロップ操作のすべての操作をコマンド オブジェクトにカプセル化して、取り消し/単一のアトミック操作としてのドラッグ アンド ドロップのやり直し。
ViewModel.ObservableCollection の CollectionChanged イベントにフックすると、複数のイベントが発生し、ViewModel の観点からは、特定の追加/削除/移動イベントが単独で存在するかどうか、またはシリーズの一部になるかどうかを知る方法はありません。すべてのイベントは、1 人のユーザーのドラッグ アンド ドロップに関連しています。
MultiSelectTreeView コントロールに、その基礎となる ViewModel の可能な構造に関するあらゆる種類の詳細な知識を与える (ObservableCollection の CollectionChanged イベントを一時的に解除する) など、あらゆる種類の不安定なソリューションを想像できますが、それはまったく正しくありません。
おそらく、1 つのイベントのみを発生させる .MoveRange() メソッドをサポートする ObservableCollection の独自の子孫を作成する必要があります。
WPF の経験が数週間以上ある人なら、おそらくこれらよりもはるかに優れたソリューションを提案できると思います。