7

MVVM 設計では、View が ViewModel を作成する場合、ViewModel はそのモデルについてどのように認識すべきでしょうか?

モデルをコンストラクターを介して ViewModel に渡すことができるいくつかの場所から読みました。したがって、次のようになります。

class ViewModel {
   private Model _model;
   public ViewModel(Model model) {
      _model = model;
   }
}

ビューはビューモデルを作成しているため、モデルをビューモデルのコンストラクターに渡すために、ビューはモデルについて知る必要があります。しかし、ほとんどの MVVM 設計で見られる UML ダイアグラムからは、ビューはモデルについて何も認識していないようです。

Model は ViewModel にどのように渡されるべきですか?

4

1 に答える 1

2

あなたはほぼ正しい道を進んでいますが、重要な情報が欠けているだけです。

はい、コンストラクターでモデルをビューモデルに渡すことができます。これは、依存性注入または制御の反転(IoC) として知られています。

これを実現する最も簡単な方法は、 Prismの UnityContainer を使用することです。アプリケーションの起動のどこかで、インターフェイスとそれに対応する実装型を Unity コンテナーに登録し、それ以降Resolve<MyInterface>()、Unity コンテナーを呼び出して、そのインスタンスに関連付けられた型の物理インスタンスを取得します。

Unity が本当に役立つのは、型を解決するように指示すると、可能な限り多くのコンストラクター パラメーターを自動的に解決することです。したがって、ビューモデルのコンストラクターが次のようになっている場合:

public class MyViewModel : IMyViewModel
{
    public MyViewModel(IUnityContainer container, IMyModel model)
    {
        _container = container;
        _model = model;
        ...etc...
    }
}

あなたのビューはこれを行います:

this.DataContext = container.Resolve<IMyViewModel>();

Unity コンテナーは、MyViewModel クラスのインスタンスを新しく作成します。同様に、IMyModel に関連付けられたクラスのインスタンスも解決して新しく作成します。

于 2012-10-26T03:34:10.023 に答える