如何在WPF应用程序中组合MVVM和依赖注入?

Max*_*kin 12 c# wpf dependency-injection mvvm

您能否举例说明如何使用(您最喜欢的)DI框架为WPF应用程序连接MVVM View Models?

您是否会创建一个强连接的View Models层次结构(比如每个嵌套控件的ViewModel是父ViewModel上的属性,并将它绑定到XAML中的嵌套控件的DataContext)或者您将使用某种更抽象的""查看模型"管理器",它维护一些弱连接的层次结构......就像在CAB中一样,也许?

Ken*_*art 6

如果视图模型只能与另一个一起存在,我会建立一种强大的关系.这就是拥有视图模型将直接引用一个或多个从属视图模型.另一方面,如果视图模型应该能够存在或不存在另一个模型,我采用松耦合方法,通过事件总线进行通信.

在使用DI与MVVM方面,绝对可以将两者结合起来.它很简单:

public class MyViewModel
{
    private readonly IMyDependency _myDependency;

    public MyViewModel(IMyDependency myDependency)
    {
        _myDependency = myDependency;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是请注意,这假定了MVVM的"视图模型优先"方法,这有其缺点.

  • 说实话,我在过去的8个月里改变了我的观点.我更喜欢被动的ViewModel,但在MVVM中,它可以更好地与活动的ViewModel配合使用.在ASP.NET MVC,OTOH中,被动ViewModel更容易纠缠,因为我们可以使用控制器来填充它们.不同的背景需要不同的解决方案...... (6认同)
  • 这也称为视图模型优先与视图优先.我更喜欢VM-first,但是我知道它与Blend不太匹配.对于他自己的每一个,我想. (3认同)