WPF MVVM的简洁定义

oli*_*i.G 2 wpf design-patterns mvvm

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

oli*_*i.G 7

模型:

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

视图:

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

视图模型:

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

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