wpf - WPF 的 MVVM 的漂亮而简单的定义

标签 wpf design-patterns mvvm

WPF的MVVM设计模式中Model、View、ViewModel对象的基本定义是什么?他们的职责是什么,他们每个人应该做什么和不应该做什么?

最佳答案

型号:

  1. 代表数据
  2. 实体。
  3. 模型类是封装应用程序数据和业务逻辑的非可视类。
  4. 他们负责管理应用程序的数据,并通过封装所需的业务规则和数据验证逻辑来​​确保其一致性和有效性。
  5. 模型类不直接引用 View 或 View 模型类并且不依赖于它们的实现方式
  6. 模型类通常通过INotifyPropertyChanged 提供属性和集合更改通知 事件和 INotifyCollectionChanged接口(interface)。
  7. 这使它们可以轻松地在 View 中进行数据绑定(bind)。
  8. 表示对象集合的模型类通常派生自 ObservableCollection<T>类。
  9. 模型类通常通过 IDataErrorInfo 提供数据验证和错误报告。或 INotifyDataErrorInfo接口(interface)。
  10. 模型类通常与封装数据访问和缓存的服务或存储库结合使用。
  11. 不需要知道它从哪里获取数据,即从 WCF 服务获取数据。 WCF RIA 服务等
  12. 可能包含验证。

查看:

  1. View 是一个可视元素,例如窗口、页面、用户控件或数据模板。
  2. View 定义 View 中包含的控件及其外观、视觉布局和样式。
  3. View 通过其 DataContext 属性引用 View 模型
  4. View 中的控件是数据绑定(bind)到ViewModel 公开的属性和命令。
  5. View 可以自定义 View 和 View 模型之间的数据绑定(bind)行为。 例如, View 可以使用值转换器来格式化要在 UI 中显示的数据,或者它可以使用验证规则为用户提供额外的输入数据验证。
  6. View 定义和处理 UI 视觉行为,例如可能由 View 模型中的状态更改或通过用户与 UI 的交互触发的动画或转换。
  7. View 的代码隐藏可以定义 UI 逻辑来实现难以用 XAML 表达的视觉行为,或者需要直接引用 View 中定义的特定 UI 控件的视觉行为。

View 模型:

  1. ViewModel 是一个非可视类,不派生自任何 WPF 或 Silverlight 基类。
  2. 它封装了支持应用程序中的用例或用户任务所需的表示逻辑
  3. ViewModel 可独立于 View 和模型进行测试。
  4. ViewModel 通常不直接引用 View 。它将具有绑定(bind)到 View 的 UI 友好实体、UI 状态、操作和公共(public)属性。
  5. 实现 View 可以数据绑定(bind)到的属性和命令
  6. 它通过 INotifyPropertyChanged 的更改通知事件通知任何状态更改的 View INotifyCollectionChanged接口(interface)。
  7. 使用各种命令与 View 交互。
  8. View 模型协调 View 与模型的交互
  9. 它可以转换或操作数据,以便它可以很容易地被 View 使用,并且可以实现模型中可能不存在的其他属性。
  10. 它还可以通过 IDataErrorInfo 实现数据验证或 INotifyDataErrorInfo接口(interface)。
  11. View 模型可以定义 View 可以直观地向用户表示的逻辑状态。
  12. 调用服务以在 MVVM 三元组之外进行通信。

来源:http://code.msdn.microsoft.com/Design-Patterns-MVVM-Model-d4b512f0

关于wpf - WPF 的 MVVM 的漂亮而简单的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13156040/

相关文章:

.net - 没有 ListBox.SelectionMode ="None",是否有另一种方法可以禁用列表框中的选择?

c# - 更新 ViewModel 属性时如何避免递归?

c# - 在不直接访问模型层的情况下从 View 访问模型类

c# - WPF 中的最小化窗口位置

wpf - 具有自动高度的网格行中的列表框。滚动条不工作

c# - WPF 虚拟化 Treeview 中的滚动错误

java - 如何通过父类的引用来访问子类的成员?

java - 制作不可修改的对象

c# - 数据访问层和MVC分离?

VS2008 中的 Silverlight MVVM - 非入门者?