1

System.Windows.Controls.TreeView から継承する「MultiSelectTreeView」と呼ばれるカスタム WPF コントロールに取り組んでいます。その目的は、複数選択とドラッグ アンド ドロップを可能にすることです。

この MultiSelectTreeView コントロールを含むビューの xaml は、基になるビュー モデルによって公開される ObservableCollection をバインドします。

ドラッグ アンド ドロップ操作には、ObservableCollection での多くの削除/追加 (または移動) 操作が含まれる可能性がありますが、1 回のドラッグ アンド ドロップ操作のすべての操作をコマンド オブジェクトにカプセル化して、取り消し/単一のアトミック操作としてのドラッグ アンド ドロップのやり直し。

ViewModel.ObservableCollection の CollectionChanged イベントにフックすると、複数のイベントが発生し、ViewModel の観点からは、特定の追加/削除/移動イベントが単独で存在するかどうか、またはシリーズの一部になるかどうかを知る方法はありません。すべてのイベントは、1 人のユーザーのドラッグ アンド ドロップに関連しています。

MultiSelectTreeView コントロールに、その基礎となる ViewModel の可能な構造に関するあらゆる種類の詳細な知識を与える (ObservableCollection の CollectionChanged イベントを一時的に解除する) など、あらゆる種類の不安定なソリューションを想像できますが、それはまったく正しくありません。

おそらく、1 つのイベントのみを発生させる .MoveRange() メソッドをサポートする ObservableCollection の独自の子孫を作成する必要があります。

WPF の経験が数週間以上ある人なら、おそらくこれらよりもはるかに優れたソリューションを提案できると思います。

4

1 に答える 1

0

これがあなたに役立つかどうかはわかりませんが、今日私はそれに遭遇しました。

INotifyCollectionChangedを使用したバッチ更新

于 2013-02-22T20:28:55.590 に答える