MVVM Lightライブラリを使用してアプリケーション(c#、wpf)を開発しています。 メインウィンドウにViewModelが添付されています(DataContext="{Binding Main, Source={StaticResource Locator}}"
)。それで大丈夫です。 しかし、私は別のUserControlsを持っているメインウィンドウで。現時点で使用されているようなスイッチャーで定義されています。質問がユーザーコントロールのためのViewModelを宣言すると、UC DataContext
にリンクする方法ですMVVMライトでUserControlのViewModelを宣言/アタッチする方法
<DataTemplate DataType="{x:Type model:Type1}">
<controls:UC1 Content="{Binding}"/>
</DataTemplate>
。これが設計時のデモ・データをサポートするなら、非常に良いでしょう。
を追加しますか?これは、DataTemplatesとContentControlを正しく使用しているときに自動的に行われます。これは、1)あなたがそうでないこと、または2)ユーザーコントロールがどのように動作するかを制御するビューモデルを作成していることを示唆しています。 #1が真であればあなたの質問からは分かりません。#2が真であれば、それをやめてください。 TextBoxにはTextBoxViewModelがありますか? MVVM!=コードビハインドなし。 UIロジックがコードビハインドに入ります。 – Will
@ WillはいUC DataContextを今すぐリンクします。そして、私の主な目的は、UCの行動をコントロールすることです(#2)。なぜ私はそれをしたいのですか?UCはかなり複雑です(実際は各コントロールは小さなプログラムですが、メインウィンドウの下にいくつかを統合したいのです)。 –
UserControlsの動作を制御するViewModelを作成すると、いたずらが発生する可能性があります。ほとんどの場合、DataContextのフローを妨害します。擬似DataContextのようなプロパティをビューモデルにバインドしようとしているか、DataContextにあるものをじゃまにすることに問題があるかもしれません。解決策はこれをしないことです。あなたのUIロジックをコードビハインドに入れてください。 – Will