ViewModel可以在MVVM模式中与View对话吗?

时间:2010-02-17 09:14:16

标签: wpf silverlight design-patterns mvvm

在MVP模式中,Presenter有一个View接口,因此演示者可以调用iview.DoSomething().. MVVM模式怎么样?

根据John Gossman的UML图http://blogs.msdn.com/johngossman/archive/2006/04/13/576163.aspx,ViewModel没有View的界面。因此,看起来应该只通过Binding传递ViewModel和View。 (或使用附属物或混合行为等)。

你们觉得怎么样?

4 个答案:

答案 0 :(得分:7)

我同意John Gossman的观点。 ViewModel与View“对话”的方式仅限于Bindings。实际上 - ViewModel根本不应该关心View。它应该只是通过属性使数据可用,并由View决定它将在ViewModel中动态绑定到什么。如果ViewModel想要告诉View,那么这应该通过Bindings隐式发生。

一小时前问了一个类似的问题 - here

答案 1 :(得分:1)

MVVM的全部目的是大大减少WPF表单或用户控件的代码隐藏类中的代码量。我们的想法是,通过使用数据绑定和/或命令的组合,可以将经典MVC / MVP中的视图处理的任何内容转换为VM。在我对MVVM的一般用法中,我设法完全删除了我的表单/用户控件中的所有代码隐藏,并且VM没有直接了解它所控制的视图。如果您的情况真的无法通过数据绑定或命令来处理,那么请详细说明您的初始问题,我(或者这里有许多更有才华的MVVM员之一)将试图指出您正确的方向

答案 2 :(得分:1)

它通常会 - 通过INotifyProperty上的事件发生变化,如果没有别的话。

答案 3 :(得分:1)

  

ViewModel可以与MVVM模式中的View对话吗?

是的,但是以脱钩的方式。允许为通信引入接口 IView

MVVM模式即将逻辑从View移动到ViewModel。通过这种方式,我们可以对这种逻辑进行单元测试。