0

MVVM パターンでは、3 つのユーザー コントロールで使用される共通の ViewModel が 1 つあります。ViewModel をインスタンス化し、それをパラメーターとしてユーザー コントロールのコンストラクターに渡していましたが、これにより、オブジェクトをパラメーターなしのコンストラクターで構築する必要がある XAML が壊れます。

共有 ViewModel を作成するための受け入れられているベスト プラクティスは何ですか?

4

4 に答える 4

2

SharedViewModelType :のプロパティを含む 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>
于 2012-12-11T14:50:41.387 に答える
1

UserControls にパラメーターなしのコンストラクターを追加するだけです

public MyUserControl() : base(new MyViewModel())
{}

public MyUserControl(MyViewModel viewModel)
{}

注: これにより、いくつかの設計パラダイムが壊れる可能性があります。:)

于 2012-12-11T14:51:37.797 に答える
1

Unity による依存性注入 ( http://msdn.microsoft.com/en-us/library/ff660899(v=pandp.20).aspx ) または MEF は、ビューをビューモデルに結合する標準的な MVVM の方法です。

ただし、MVVM はパターンであり、厳格なフレームワークではないことを忘れないでください。ビューのコード ビハインドに 1 行のフックアップを含めることができます。

InitializeComponent();
this.DataContext = new ViewModel(whatever);

空が落ちることなく。

于 2012-12-11T14:51:32.303 に答える
0

ビューモデルを初期化する基本ビューを持つことができます

于 2012-12-11T14:46:59.113 に答える