2010-12-10 10 views
3

私はCaliburn.Microを使用しているWindows WPFアプリケーションを持っています。メインウィンドウビュー/ビューモデルはCaliburn.Microによって処理されます。そのボタンの1つは、別のview-viewmodelを使用する新しいダイアログウィンドウをポップアップさせます。2つのCaliburn.Microビューを含むダイアログビュー?

このダイアログでは、他のダイアログに含めることができるように、再利用可能なコントロールにしたいコンテナ(リストボックスとフィルタコントロール)があります。これを行うには、ダイアログのビューから抽出し、関連するコードを表示し、新しいビューとビューモデルを作成しました。これはすべて見栄えです。

問題は、ダイアログボックスに戻って、再利用可能なコントロールが必要な大きな空きスペースがあるドックパネルがあることです。

ダイアログのviewmodel OnInitalize()から、再利用可能なコントロールビューモデルを作成できましたが、ダイアログビューのドックパネルに表示する方法を知りません。

メインウィンドウviewmodelからダイアログを作成するには、WindowManager()を使用します。ShowDialog()を使用してダイアログのビューモデルを表示し、Caliburn.Microがビューの設定を行います。ダイアログのXAMLで、再利用可能なコントロールのビューを埋め込み、Caliburnに適切なビュー/ビューモデルを作成させる方法を指定できますか?

また、私は間違った方法をしていますか?

答えて

8

別のビューモデルタイプであるダイアログビューモデルにプロパティがあり、このプロパティと同じ名前のダイアログビューにContentControlを追加すると、Caliburn.Microは自動的に対応するビューを挿入しますプロパティビューのモデルタイプをContentControlプレースホルダに追加し、そのビューモデルタイプをビューに自動的にバインドします。これはあなたが意味することですか?ような何か:もちろん

// Dialog View Model 
private MyReusableControlViewModel myReuseableControl; 
public MyReusableControlViewModel MyReuseableControl 
{ 
    get { return this.myReuseableControl; } 
    set { this.myReuseableControl = value; NotifyOfPropertyChanged(...); } 
} 

// Dialog View Model Constructor 
public DialogViewModel() 
{ 
    this.MyReuseableControl = new MyReusableControlViewModel(); 
} 

// Dialog View 
<DockPanel> 
    ... 
    <ContentControl x:Name="MyReusableControl" /> 
</DockPanel> 

は、理想的にするのではなく、具体的なタイプよりも、ダイアログビューモデル内の抽象化に対するダイアログビュー(この場合はMyReusableControlViewModel)モデルと仕事の依存関係を注入したいと思います。

+0

これはまさに私が探しているように聞こえる、私はそれを試してみましょう。 – DaveK

+0

完璧に動作します、ありがとう! – DaveK

+0

これを理解しようと数時間を費やしたが、私はこの答えを見つけた。ありがとう、ソリューションは私が思ったよりはるかに簡単だった。 –

関連する問題