是否以及如何使用MVVM

And*_*Lee 2 wpf mvvm

您好,我在MSDN上阅读过很多关于MVVM的文章.

我至少在技术上理解它,但我不知道是否说我理解它或不作为一种设计模式.

因为在我的场景中想象MVVM时,我的想法被困在某个地方.所以请帮助决定是否要MVVM以及是否如何.

我有一个包含一些形状和按钮的布局.我允许用户自定义它们(至少颜色和字体).我想将可自定义的属性值存储为XML,并将它们单向绑定到XmlDataSource.每次用户启动应用程序时,都会从Xml文件中检索颜色/字体.

当用户单击布局说明按钮的某个组件时,将填充自定义UI按钮(例如颜色选择器和字体选择器).现在用户可以选择更改颜色/字体.所以在这里,我认为我应该生成自定义UI,将它(通过代码动态地)绑定到ViewModel,而ViewModel将包含操作Xml的方法(将是Model XmlDataProvider).

然而,我在网上阅读的所有文章都讨论了对象ViewModel(并通过许多接口将它连接到UI),但没有谈论ViewModel如何绑定到底层数据源,无论是XML还是SQL.

所以从布局到Xml文件 - 将有一种方式绑定,从Customization UI到Xml文件,中间会有ViewModel.

自定义UI所做的任何更改是否会立即反映在布局上?这种绑定架构是对的吗?在这种情况下,这是什么?我是在搞乱MVVM的设计理念吗?这应该是不同的方式吗?或者我不应该去MVVM?请帮忙.

我努力学习所有重大文章,我很了解它们,但是:(.谢谢.

Jor*_*mer 5

MVVM非常适合您尝试的操作,但请记住,MVVM的目标是在UI级别提供抽象.它将UI显示逻辑与获取和转换数据的逻辑分开.

从XML加载配置文件是很好的,但就您的视图而言,它只需要知道ViewModel上要绑定的属性.当您的ViewModel更新该属性时(通过查询模型),UI将自动更改,而您无需执行任何操作.

ViewModel如何获取数据完全取决于您.这就是Model的用武之地.您的模型将获取ViewModel将使用的数据.这不是一个硬性规则,但您的模型将是解决方案中提取数据的服务或其他类.该服务或类提供用于从数据源查询数据的数据访问方法.该模型可以在其前面有一个接口,因此如果您需要在该级别工作,它可以互换.

如果您使用的是Silverlight,则很可能数据来自对服务器上的Web服务的调用.如果您使用的是WPF,则可能有一个直接从XML文件或数据库中提取的数据层.ViewModel负责在视图和数据之间提供粘合剂.我只是不会将查询逻辑直接放在ViewModel中.我会在一个单独的数据层中.

在我的拙见中,许多MVVM倡导者都喜欢过度复杂化这种模式.它们将所有东西都包装在接口中并编写大型框架来实现MVVM.这些工具占有一席之地,但我相信必须谨慎行事,不要过度复杂化,这可以通过更简单的实现来解决.对于基本应用程序,只需拥有视图直接绑定的ViewModel类就足够了.