WPF MVVM 混淆

3
根据我的理解,MVVM是关于IT技术的。其中有一个模型(实体类也实现了INotify...),视图(XAML代码)和一些类作为VM(一种控制器,通常继承ICommand),让我们可以在特定事件上生成事件/命令...
我只是想知道ViewModel类和XAML的代码后台类之间的区别...为什么我们不考虑并增强代码后台...
我脑海中没有什么足以证明这一点的理由...
或者请用示例写些东西来清晰地解释MVVM...以及为什么MVC或MVP对WPF应用程序来说是地狱?
5个回答

5
模型没有实现INotifyPropertyChanged,视图模型实现了。实际的WPF视图数据绑定到视图模型上。现在有很多在线文档可以参考。

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

MVVM与Fowler的Presentation Model完全相同,因为两种模式都包含了对View的抽象,其中包含了View的状态和行为。

http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx

实际上,只有应用程序 UI 的一个小子集可以直接绑定到模型,特别是如果模型是现有类或数据模式,而应用程序开发人员无法控制,则很可能无法将其与控件直接对应。 模型很可能具有无法直接映射到控件的数据类型。 UI 可能希望执行复杂操作,必须在代码中实现,这在我们严格定义的视图中不合理,但太具体,无法包含在模型中(或未随预定义模型一起提供)。 最后,我们需要一个放置视图状态(例如选择或模式)的位置。 ViewModel 负责这些任务。 该术语表示“视图模型”,可以将其视为视图的抽象,但它还为视图提供了 Model 的专业化,可用于数据绑定。 在后一种角色中,ViewModel 包含数据转换器,将 Model 类型转换为 View 类型,并包含 View 可以用来与 Model 交互的命令。 MVVM 与 WPF 相关,因为 WPF 的数据绑定机制与此模式结合使用可轻松测试 GUI。

4

1
Jason Dolinger的视频真是太棒了。 - Eduardo Molteni
Mike Taulty的系列非常好,特别是如果你想要混合一点Prism的话。 - Anderson Imes

1
(除了其他人已经提到的原因之外:)因为它使您的代码更易于阅读。在代码后面的文件中,您有界面元素,这些元素在XAML中无法实现或过于复杂。在视图模型代码文件中,您可以找到与填充表单数据相关的所有内容。
像所有设计模式一样,盲目地遵循它并不是最好的主意。对于非常小的窗口,MVVM可能没有意义。对于较大的窗口,MVVM会强制您将关注点分离,通常会使您的代码后台文件和MVVM类更容易阅读、理解和调试。

0

首先,对于MVVM的目的,您不需要让VM继承ICommand。相反,VM包含一组从ICommand继承的类型属性。因此,View只需将这些属性绑定到它们。例如:

<Button Command="{Binding DoSomethingCommand}" />

而且不使用代码后台,因为它基本上是视图的不可分割的一部分。它是与您的视图相同的类。您无法轻松地测试它,并且您的代码通常与XAML紧密耦合。

而模型并不真正需要(但可以)支持INotifyPropertyChanged。而ViewModel当然应该实现此接口以允许绑定。

我建议您阅读一些介绍性文章。这可能是第一个:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx


0
为什么我们不考虑并增强 Code Behind 呢?对于开发人员来说,Code Behind 往往(总是?)是最简单的方法。但 MVVM 的设计目的不仅仅是帮助开发人员。MVVM 还可以为数据库管理员和图形设计师提供帮助。
将 M(代表数据库)、V(代表艺术家)和 VM(代表你)区分开来,使每个人都可以独立地工作。因此,例如,在你连接数据库之前,你无需等待图形设计师制作 UI。理论上,大家都可以并行工作。
关注点分离意味着各自负责不同的工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接