4

私はMVVMパターンに従うのはかなり新しいです。MVVMLightを使用しています。MVVMLightを使用したViewModelの複数の一意のインスタンスがどのようにあるのか疑問に思っています。たとえば、n個のウィンドウを開くことができるアプリケーションがあります。それぞれが同じビューモデルを使用します。私はMVVMに興味があり、そこに独自のインスタンスを与えるのに最適な方法は何ですか。

MVVM Lightの例に従うと、ViewModeLocatorには、各ウィンドウが使用する静的インスタンスのみが含まれます。

前もって感謝します。

4

2 に答える 2

10

簡単:

public EndingViewModel EndingViewModel
{
    get 
    { 
      return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString()); 
    }
}

ServiceLocator から解決するときは、GetInstance の呼び出しが一意の値をメソッドに渡すようにしてください。上記の例では、guid を渡します。

オブジェクトを手動で構築することは、MVVM Light に Dependency Injection コンテナーを含めるという点を無効にするため、実際には行いません。

于 2012-10-24T08:56:20.300 に答える
5

ビュー モデル ロケーターで静的ビュー モデルのみを使用する義務はありません。このアプローチは、ビューが同じビュー モデル インスタンスを共有している場合にのみ意味があります。このシナリオでは、ビュー モデルのインスタンスを新しく作成し、作成する各ウィンドウの DataContext プロパティに割り当てるだけです。

public void ShowChildWindow(Window parent)
{
    var window = new WindowView();
    window.DataContext = new ViewModel();
    window.Show();
}
于 2012-10-24T03:59:11.200 に答える