1

このサイトを検索したところ
、MVVMパターンでwpfユーザーコントロールを読み込む方法が2つ見つかりました。

MVVM-Light:UserControlをウィンドウにロード

しかし、それでも私は私の問題とこのリンクへの答えを見つけることができません

MVVM-ライトロケーターパターンと再利用可能なUserControl

私は理解していませんでした....だからここに私は私のような他の人が苦労しているのを助けるかもしれない私の問題を述べています......

MainWindowは2つの部分からなるaを持っています。1つはTreeView(a UserControl)を持ち、もう1つはWindowsエクスプローラーと同じように異なるユーザーコントロール(DisplayPanelという名前)を表示します。

右側の表示パネルには、ツリービューのクリックノードにさまざまなユーザーコントロールが表示されます。

TreeViewはそれ自体がユーザーコントロールです。

を使用してこの複合UIを機能させるにはどうすればよいですかMVVM。また、MVVMlightToolkitの使用を計画しています。これは助けることができる何かを持っていますか...

例は素晴らしいでしょう

ありがとう... :)

編集

私のTreeViewは、ツリービューの選択されたアイテムをキャッチUserControlする依存関係プロパティを作成しました。UserControlこれにより、この依存関係プロパティを使用して、「MainView」ContentControlバインディングに必要なビューを設定できます。コメントでアドバイスされたとおりです。 。すべてが今までです

問題は、選択したアイテムに含まれるデータを表示したいのですが、UserControlsのDataContext(右側に表示されます)を選択したアイテムに設定できないため、ビューモデルを使用できなくなります。コマンドおよびその他の操作のそれぞれのユーザーコントロール

私もこれを解決しようとしました....TreeViewUserControlビューモデルのメディエーター(メッセンジャー)を使用して、Usercontrol(表示する必要があるもの)のビューモデルにメッセージを送信しました。ツリービューでアイテムが選択されるたびにメッセージが渡されます。メッセージには選択したノードが含まれます。データを表示できるように、UserControlのデータコンテキストをビューモデルに設定したことを忘れました

しかし、このアプローチを使用すると、問題は、あるタイプのノードを初めてクリックしたときにデータが入力されないが、同じタイプのノードをもう一度クリックするとデータが入力されることです。何が起こっているのかというとUserControl、ツリーアイテムが初めてクリックされ、メディエーターがメッセージを送信したときに、オブジェクトが使用可能になります。そのため、メディエーターはメッセージをuserControlビューモデルに渡すことができません。

私はこれをさらに解決する考えがまったくありません....ユーザーコントロールを正しく表示するか、他のことをする必要がある場合は私の方法です....完全に混乱しています.....

4

1 に答える 1

1

TreeViewのItemsSourceでタイプごとにDataTemplateを定義してみて、右側に特定のUserControlを配置する代わりに、TreeViewのSelectedItemにバインドするだけで済みます。または、 DataTemplateSelectorを使用することもできます。

OPの編集のために編集
しましたか?

  • MainWindowTreeViewがありますItemsSource=Binding MainVM.Items
  • MainWindowContentControlがありContent=Binding TreeView.SelectedItemます。
  • プロジェクトのどこかで、ResourceDictionary可能な各タイプにMainVM.ItemsDataTemplateが定義されていますか?

どのViewModel(MainVMまたはItemVM)を使用しようとしていますか、またなぜそれを使用できないのですか?

于 2011-06-07T20:12:29.977 に答える