MVVM パターンでは、3 つのユーザー コントロールで使用される共通の ViewModel が 1 つあります。ViewModel をインスタンス化し、それをパラメーターとしてユーザー コントロールのコンストラクターに渡していましたが、これにより、オブジェクトをパラメーターなしのコンストラクターで構築する必要がある XAML が壊れます。
共有 ViewModel を作成するための受け入れられているベスト プラクティスは何ですか?
SharedViewModel
Type :のプロパティを含む MainWindow の ViewModel を作成できますpublic SharedViewModel SharedViewModel {get;set;}
。Window の DataContext を MainViewModel に設定し、次のように共有 ViewModel にバインドします。
<Window>
<Grid>
<UserControl1 DataContext="{Binding Path=SharedViewModel}"/>
<UserControl2 DataContext="{Binding Path=SharedViewModel}"/>
<UserControl3 DataContext="{Binding Path=SharedViewModel}"/>
</Grid>
</Window>
UserControls にパラメーターなしのコンストラクターを追加するだけです
public MyUserControl() : base(new MyViewModel())
{}
public MyUserControl(MyViewModel viewModel)
{}
注: これにより、いくつかの設計パラダイムが壊れる可能性があります。:)
Unity による依存性注入 ( http://msdn.microsoft.com/en-us/library/ff660899(v=pandp.20).aspx ) または MEF は、ビューをビューモデルに結合する標準的な MVVM の方法です。
ただし、MVVM はパターンであり、厳格なフレームワークではないことを忘れないでください。ビューのコード ビハインドに 1 行のフックアップを含めることができます。
InitializeComponent();
this.DataContext = new ViewModel(whatever);
空が落ちることなく。
ビューモデルを初期化する基本ビューを持つことができます