2010-11-24 10 views
2

TreeViewDragDropTargetに関連する「舞台裏の魔法」がたくさんあるようです。TreeViewDragDropTarget MVVMを使用する方法

私が今まで見たすべての投稿は、TreeViewがバインドされているデータの収集に何が起こっているのかを説明することなく、ツリービューのプレゼンテーションを中止します。

TreeViewDragDropTargtは、TreeViewがバインドされているViewModelプロパティにどのように通信しますか? TreeView Drag and Drop ala MVVMに関するMVVM指向のチュートリアルやチュートリアルはありますか?

UPDATE: "If an item is dropped onto the drag drop target, it is added to the nested control if the nested control is bound to an ObservableCollection (or any collection that implements INotifyCollectionChanged and contains the same type of items as the item that was dropped)."

そして、何その手段は私が私のツリービューが同期して、私のモデルを維持するためにバインドされているのObservableCollectionのて、CollectionChangedイベントにフックできることです。

もっと良い選択肢はありますか?

+0

あなたはまだコードを使用することができます、それはMVVMのaproachによって禁止されていない、あなたがする必要がない場合は、コードを使用しないようにすることが良い練習です。 – Rumplin

+0

@Rumplin Point taken。この問題の問題は、mvvmパターンの基本はVMがデータに対する責任を共有していることですが、この場合、VMがそのデータの変更についてVMに通知するのは面倒です。 –

+0

メッセンジャーを使用してコードのデータをVMに送り返す – Rumplin

答えて

1

これまでのところ、これまでより優れた選択肢はありませんでした。 MVC/MVP/MVVMパターンの背後にあるポイントは、できるだけ多くのコードをテストすることです。

ドラッグ&ドロップの場合、プレゼンテーション - >コードビハインド - >メッセンジャーレイズメッセージ "アイテムの追加"を使用し、ViewModelからイベントをキャッチしました。

コードビハインドにカスタムロジックがある場合、たとえば、「ソース」が有効なステータス(正しいタイプなど)であることを検証する場合、このチェックを「サービス」に委譲することができます(Dependency Injected )これらの奇妙なケースを扱うことに特化される。コードの背後は似通ったものになり、「ドラッグサービス」はテスト可能になります。

本当に "ドラッグサービス"が必要ですか?その場合、ViewModelごとに1つ、またはアプリケーションごとに1つの "ドラッグサービス"が必要ですか?あなたの古典的な答え "It Depends"で私は答えます。

関連する問題