2016-08-16 25 views
-1

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> 

。これが設計時のデモ・データをサポートするなら、非常に良いでしょう。

+0

を追加しますか?これは、DataTemplatesとContentControlを正しく使用しているときに自動的に行われます。これは、1)あなたがそうでないこと、または2)ユーザーコントロールがどのように動作するかを制御するビューモデルを作成していることを示唆しています。 #1が真であればあなたの質問からは分かりません。#2が真であれば、それをやめてください。 TextBoxにはTextBoxViewModelがありますか? MVVM!=コードビハインドなし。 UIロジックがコードビハインドに入ります。 – Will

+0

@ WillはいUC DataContextを今すぐリンクします。そして、私の主な目的は、UCの行動をコントロールすることです(#2)。なぜ私はそれをしたいのですか?UCはかなり複雑です(実際は各コントロールは小さなプログラムですが、メインウィンドウの下にいくつかを統合したいのです)。 –

+0

UserControlsの動作を制御するViewModelを作成すると、いたずらが発生する可能性があります。ほとんどの場合、DataContextのフローを妨害します。擬似DataContextのようなプロパティをビューモデルにバインドしようとしているか、DataContextにあるものをじゃまにすることに問題があるかもしれません。解決策はこれをしないことです。あなたのUIロジックをコードビハインドに入れてください。 – Will

答えて

-1

この

<DataTemplate DataType="{x:Type model:Type1}"> 
    <controls:UC/> 
</DataTemplate> 

を試してみても、あなたは、 "ユーザーコントロールのためのViewModelを宣言し、UCのDataContextにリンクする" したいと思うのはなぜ

<ContentPresenter Content="{Binding ViewModelObj}"> 
</ContentPresenter> 
+0

"質問はUserControlのViewModelを宣言してUCにリンクする方法です" –

+0

+0

@ASMahadik:詳細を知るための情報があれば答えを編集して新しい情報を含める必要があります。そうすれば、読者はコメント履歴を読むことなく、あなたの答え全体を理解することができます。 –

関連する問題