Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf ViewModel能否以MVVM模式与View对话?_Wpf_Silverlight_Design Patterns_Mvvm - Fatal编程技术网

Wpf ViewModel能否以MVVM模式与View对话?

Wpf ViewModel能否以MVVM模式与View对话?,wpf,silverlight,design-patterns,mvvm,Wpf,Silverlight,Design Patterns,Mvvm,在MVP模式中,演示者有一个视图界面,因此演示者可以调用iview.DoSomething()。。在MVVM模式中呢 根据JohnGossman的UML图,ViewModel没有视图接口。因此,似乎ViewModel和View应该仅通过绑定进行通信。(或使用附加属性或混合行为等) 你们觉得怎么样 MVVM的全部目的是大大减少WPF表单或用户控件的代码隐藏类中的代码量。其思想是,通过使用数据绑定和/或命令的组合,可以将在经典MVC/MVP中由视图处理的任何内容转换到VM。在我一般使用MVVM的过程

在MVP模式中,演示者有一个视图界面,因此演示者可以调用iview.DoSomething()。。在MVVM模式中呢

根据JohnGossman的UML图,ViewModel没有视图接口。因此,似乎ViewModel和View应该仅通过绑定进行通信。(或使用附加属性或混合行为等)


你们觉得怎么样

MVVM的全部目的是大大减少WPF表单或用户控件的代码隐藏类中的代码量。其思想是,通过使用数据绑定和/或命令的组合,可以将在经典MVC/MVP中由视图处理的任何内容转换到VM。在我一般使用MVVM的过程中,我成功地完全删除了表单/用户控件中的所有代码,而VM并不直接知道它所控制的视图。如果您遇到数据绑定或命令无法处理的情况,请详细说明您最初的问题,我(或这里的许多更有才华的MVVM专家之一)将尝试为您指出正确的方向。

我同意John Gossman的观点。ViewModel与视图“对话”的方式仅通过绑定。事实上,ViewModel根本不应该关心视图。它应该只通过属性使数据可用,并且由视图决定它将在ViewModels中动态绑定到什么。如果ViewModel想要告诉视图一些事情,那么应该通过绑定隐式地进行


一小时前也有人问过类似的问题-

它通常会通过INotifyProperty上的事件进行更改,如果没有其他更改的话

ViewModel能否以MVVM模式与View对话

是的,但是以一种解耦的方式。允许为通信引入接口IView


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

非常感谢。我也同意这一点。当我写这篇文章时,有人说在ViewModel中使用view界面是可以的。我告诉他们这将是一个MVP模式。当然,我们可以混合这些模式,但我认为在VM中使用视图接口违反了MVVM模式。。谢谢你的回答。。我真的很感激。听起来你走对了方向。很高兴能帮上忙。将查看您的博客帖子!:-)谢谢如果您对该帖子有任何评论或建议,请告诉我:)不错的帖子:-)我喜欢的一件事是,我可以让模型类保持干净,而不是仅仅因为视图需要而在那里添加东西。例如,我不必仅仅因为视图希望对某些列表进行排序就对其进行排序,这是ViewModel要处理的问题。但是你说这个模型可以是普通的DTO来掩盖这一点。谢谢,Stain。。大多数人都同意我在那篇文章中提到的关于MVVM的所有事实(除了一个)。。人们唯一不同意的一点是,有些人认为他们可以在ViewModel中拥有一个视图界面。谢谢。问题是~您认为在ViewModel中使用视图接口违反MVVM模式吗?示例:IPersonView、PersonView和PersonViewModel。。PersonViewModel有IPersonView…嗨,很抱歉错过了评论,看到你接受了Stian的回答,但为了完整性,这里是我的回复。我确实认为它违反了MVVM模式(在我的理解中),正如现在提到的,通过公开属性使用数据绑定是更新视图的方法。很高兴你得到了答案:)谢谢,伙计。。。事实上,你的帖子也回答了我的问题,但这里的问题是我不能将多个帖子标记为已回答。由于MVVM模式没有标准规则,也没有所有者/创建者,所以我们需要询问每个人我们是否都同意这一点:)这就是为什么我要问关于不同社区中MVVM的问题,并在我的一篇文章中写下总结信息。我很抱歉。我不明白你的意思。。你是说在VM中有一个视图接口吗?假设你说的是C#,INotifyPropertyChanged接口上公开的事件通常由视图监听(通过数据绑定)。数据绑定并不是很神奇——它只是将处理程序连接到INotifyPropertyChanged和INotifyCollectionChanged上的事件。但是,是的,我要说的是,虚拟机通常会与视图对话,以通知它数据的更改。不过,它有一个抽象视图的概念,而不是一个特定的实现——它的通信应该限于“this changed”而不是“so change this control”是的。。所以,“这改变了”限制=数据绑定,对吗?:)是的:)但我并不认为其他类型的通信有什么问题,只要基本上是发送数据,并且没有关于视图的知识泄露出去。其他人可能比我更纯粹:)嗨,斯卡夫曼,谢谢。。你编辑了什么?:)他添加了设计模式标签。点击“已编辑”文本查看编辑历史。谢谢。。。伟大的我没有看到“编辑过的”文本。。我只看到“编辑|回滚|删除|标志”。无论如何,谢谢你为我的帖子添加了一个标签…我很久以前就看过WAF了。我在演示中看到WAF的创建者在代码中设置了密码。不知道他为什么那样做。>>是的,但是以一种解耦的方式。那么,MVP和MVVM模式之间有什么区别呢?我们也可以将逻辑移到MVP中的Presenter。您认为可以从ViewModel设置iview.DoSomething吗?从解耦和可测试性的角度来看,绝对允许从ViewModel调用iview.DoSomething。如果使用绑定,则定义ViewModel的属性。因此视图知道ViewModel的属性。只是绑定使用反射(不是类型安全的),但耦合是相同的。为了解耦和可测试性,我们甚至不需要使用MVVM模式。MVC或MVP或etc也是可测试的。我还有两个问题。1) 如果你这么说