2010-12-14 22 views
0

WPF UserControl View/ViewModelのペアを作成しました。ビューXAMLがレイアウトとバインディングを処理し、ViewModelが推奨されたロジックをインラインで処理します。 MVVMパターン。WPF ViewModel/View UserControlをコントロールとしてカプセル化するには

私はこれをコントロールとして再利用したいと考えています。

ビューに関連付けられたViewModelを非表示にしてカプセル化すると、標準のコントロール[ボタンなど]と同じようにコントロールを使用できますか?

つまり、コントロールのビューモデルを非表示にするにはどうすればよいですか?

答えて

2

は、ViewModelクラスをコントロールにバインドする方法によって異なります。 あなたはこのように行う場合:

YourControl() 
{ 
    DataContex = new ViewModel(); 
} 

その後、私は何の問題も表示されません。コントロールへの参照を追加して使用します。

+0

私のコントロールがテキスト(検索文字列)ボックスとリストボックスで構成されているとしましょう。コントロールのVMは、2つのコレクションをプロパティとして公開します.1。アイテムの合計リスト、および2.現在の検索文字列に一致するアイテムのリスト。また、2つのプロパティが公開されます:1.選択された項目の場合2.検索文字列の場合2.コントロールのプライマリデータコンテキストは独自の内部VMです。上で示唆したように行うことができます。次に、これらの「中間」プロパティを親ビューの小道具にバインドできるように、ビューに「中間」プロパティを公開する方法です。 –

+1

あなたのコントロール(ビュークラス)の依存プロパティ(DP)として '中間'プロパティを作成し、親コントロールで他のコントロールと同じように使用します。 – Arseny

0

ViewModelは、XAML内でStaticResourceとして作成できます。 ViewModelにDataContextを設定する際の問題は、コントロールを使用しているウィンドウまたはページからDataContextを使用できなくなったことを使用できないことです。あなたのXAML内

<myNS:MyViewModel x:Key="ViewModel /> 

リファレンスビューモデル::あなたのXAMLで

あなたのViewModelを宣言

<TextBlock Text="{Binding Source={StaticResource ViewModel}, Path=TextToBind}" /> 

をあなたのコードでは、あなたがアクセスしてすぐに初期化することができる背景には、私は通常のプロパティを作ります私のビューモデルへの簡単な参照。

private MyViewModel viewModel 
{ 
    get { return this.Resources["ViewModel"] as MyViewModel; } 
} 
関連する問題