WPF MVVM的简洁定义

时间:2012-10-31 10:40:20

标签: wpf design-patterns mvvm

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

1 个答案:

答案 0 :(得分:7)

型号:

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

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

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