7

在 MVVM 设计中,假设 View 创建 ViewModel,ViewModel 应该如何知道它的 Model?

我从几个地方读到,模型可以通过其构造函数传递给 ViewModel。所以它看起来像:

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

由于 View 正在创建 ViewModel,并将 Model 传递给 ViewModel 的构造函数,因此 View 必须知道 Model。但是从我从大多数 MVVM 设计中看到的 UML 图来看,视图似乎对模型一无所知。

模型应该如何传递到 ViewModel 中?

4

1 回答 1

2

你几乎走在正确的轨道上,你只是错过了一个重要的信息。

是的,可以将模型传递给构造函数上的视图模型——这称为依赖注入,或者称为控制反转(IoC)。

实现这一点的最简单方法是使用Prism的 UnityContainer 。在应用程序启动的某个地方,您向统一容器注册接口及其相应的实现类型,从那时起,您调用Resolve<MyInterface>()Unity 容器以获取与该实例关联的类型的物理实例。

Unity 真正可以帮助您的地方是,当您告诉它解析类型时,它会自动解析尽可能多的构造函数参数。因此,如果您的视图模型上的构造函数如下所示:

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

你的观点是这样的:

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

然后,统一容器将新建 MyViewModel 类的实例,因为它还将解析并新建与 IMyModel 关联的类的实例。

于 2012-10-26T03:34:10.023 回答