2010-02-17 90 views
6

在MVP模式中,Presenter具有View的接口,所以演示者可以调用iview.DoSomething()..在MVVM模式中怎么样?ViewModel能否与MVVM模式下的View对话?

根据John Gossman的UML图http://blogs.msdn.com/johngossman/archive/2006/04/13/576163.aspx,ViewModel没有View的接口。所以,好像ViewModel和View只能通过Binding进行通信。 (或使用附属财产或混合行为等)。

你们认为什么?

+0

嗨Skaffman,谢谢..你做了什么编辑? :) – 2010-02-17 10:04:15

+0

他添加了设计模式标签。点击“编辑”文本查看编辑历史记录。 – stiank81 2010-02-17 10:05:46

+0

非常感谢...我没有看到“编辑”文本..我只看到“编辑|回滚|删除|标志”。无论如何,谢谢你为我的帖子添加一个标签... – 2010-02-18 01:11:13

回答

5

我同意约翰戈斯曼。 ViewModel与视图“交谈”的方式仅通过绑定。事实上 - ViewModel根本不应该关心视图。它应该简单地通过属性使数据可用,并且视图决定它将在ViewModels中动态绑定的内容。如果ViewModel想要告诉View,这应该通过Bindings隐式发生。

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

+0

非常感谢。我同意这一点。当我写这篇文章http:// michaelsync。net/2010/02/03/rules-of-mvvm,有人说可以在ViewModel中使用view的接口。我告诉他们这将是一个MVP模式。当然,我们可以混合使用模式,但我认为在虚拟机中使用View的界面违反了MVVM模式。感谢您的回答..我真的很感激它。 – 2010-02-17 09:43:49

+0

听起来像你在正确的轨道上。很高兴有帮助。将检查您的博客文章! :-) – stiank81 2010-02-17 09:54:36

+0

谢谢。请让我知道,如果你有任何意见或建议,那个职位.. :) – 2010-02-17 10:06:42

1

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

+0

谢谢。问题是〜你认为ViewModel中的View的接口违反了MVVM模式吗?例如:IPersonView,PersonView和PersonViewModel ..和PersonViewModel有IPersonView ... – 2010-02-17 09:47:06

+0

嗨对不起,错过了评论,并看到你接受斯坦森的答案,但为了完整性,这里是我的答复。我认为它违反了MVVM模式(以我的理解),并且现在提到通过暴露属性使用数据绑定是更新视图的方式。很高兴你有一个答案虽然:) – 2010-02-17 10:27:08

+0

谢谢,男人......其实,你的帖子也回答了我,但这里的问题是,我不能标记多个帖子作为回答。 由于没有标准规则,也没有MVVM模式的所有者/创建者,所以我们需要问问大家,我们是否都同意这一点。:)这就是为什么我在不同社区提出有关MVVM的问题并写出在我的一篇文章中总结了信息.. – 2010-02-18 01:16:07

1

它通常会 - 通过INotifyProperty上的事件更改,如果没有别的。

+0

对不起。我没有得到你..你是说在虚拟机中有View的界面吗? – 2010-02-17 10:02:46

+1

假设你正在谈论C#,那么通常会通过View来监听(通过数据绑定)在INotifyPropertyChanged接口上公开的事件。数据绑定并非真正的魔术 - 它只是将处理程序连接到INotifyPropertyChanged和INotifyCollectionChanged上的事件。 但是,我想说的是,VM通常会与视图进行交谈,以通知其数据更改。它有一个* abstract *的概念,但不是一个特定的实现 - 它的通信应该被限制在“这个改变”而不是“所以改变这个控制” – kyoryu 2010-02-18 02:11:39

+0

是的。所以,“这改变”的限制=数据绑定,对吧? :) – 2010-02-18 03:14:46

1

ViewModel能否在MVVM模式下与View对话?

是的,但以分离的方式。允许引入用于通信的接口.Iiew

MVVM模式即将将视图中的逻辑移动到ViewModel中。这样我们就可以对这个逻辑进行单元测试。

+0

我看了很久后回到WAF。我看到WAF的创建者在Demo中将密码设置在代码后面。不知道他为什么这样做。 >>是的,但以分离的方式。 那么,MVP和MVVM模式之间会有什么区别呢? 我们也可以将逻辑移动到MVP中的Presenter。 你认为可以从ViewModel设置iview.DoSomething吗? – 2010-02-23 04:01:22

+0

从解耦和可测试性的角度来看,绝对允许从ViewModel调用IView.DoSomething。 如果您使用Binding,那么您可以定义ViewModel的属性。所以视图知道ViewModel的属性。这只是绑定使用反射(不是类型安全),但耦合是相同的。 – jbe 2010-02-23 18:43:46

+0

的解耦和可测试性,我们甚至不需要使用MVVM模式。 MVC或MVP等也是可测试的。我仍然有两个问题。 1)如果你说可以在ViewModel中有View的界面。你能告诉我MVP或MVVM之间的区别吗?您还可以在http://groups.google.com/group/wpf-disciples/browse_thread/thread/7588c66f21fb82af这篇链接中阅读我与Glenn的讨论。 2)你认为可以做((ViewModel)this.DataContext).DoThat()在View中吗? – 2010-02-24 01:31:46

相关问题