View和ViewModel之间的MVVM依赖关系

lak*_*tak 2 .net wpf design-patterns mvvm

目前MVVM设计模式有很多变化,但据我所知,视图允许依赖于viewmodel.我的一位同事不同意,但他无法提供令人满意的解释.

例如,我的视图包含对其视图模型的引用.所有视图都不需要这样做,但在将某些事件传递给viewmodel时无法通过ICommand进行操作会有所帮助.

这种依赖性可以吗?有什么缺点?

Ken*_*art 7

主要指标是:您可以测试它吗?

该视图绝对需要对视图模型的引用.如何获得展示自身所需的信息呢?通常只在视图中使用视图模型DataContext就足够了,但这仍然构成依赖关系.如果没有VM DataContext,视图将毫无用处.

有时您需要视图才能回调VM.通常我只是在我的代码中执行此操作:

public MyViewModel ViewModel
{
    get { return DataContext as MyViewModel; }
}

private void _someEventHandler(object sender, EventArgs )
{
    ViewModel.SomeMethod();
}
Run Code Online (Sandbox Code Playgroud)

从视图模型中获取对视图的引用是您需要小心的地方.如果VM依赖于特定的视图实现,则它与视图紧密耦合,因此难以测试.

如果VM需要以某种方式与视图交互,则可以将需求抽象到接口中,并使视图实现该接口.然后,当视图加载时,它可以为VM提供VM可以与之交互的自身的引用.