什么是模型,视图和视图模型对象在WPF的MVVM设计模式的基本定义是什么? 什么是他们的责任,他们每个人都应该和不应该做?
Answer 1:
模型:
- 表示数据 。
- 实体。
- 模型类是封装应用程序的数据和业务逻辑非可视类。
- 他们负责管理应用程序的数据和通过封装所需的业务规则和数据验证逻辑保证其一致性和有效性。
- 该模型类不直接引用视图或视图模型类,并且对它们是如何实现不依赖 。
- 模型类通常提供通过属性和收集变更通知事件
INotifyPropertyChanged
和INotifyCollectionChanged
接口。 - 这使他们能够容易地在视图绑定数据。
- 表示对象的集合的模型类通常从派生
ObservableCollection<T>
类。 - 模型类通常提供数据验证和错误通过任一报告
IDataErrorInfo
或INotifyDataErrorInfo
接口。 - 该模型类在与该封装的数据访问和缓存服务或库通常一起使用。
- 不需要知道它是从即WCF服务获取数据。 WCF RIA服务等。
- 可能含有验证。
视图:
- 该视图是一个视觉元素 ,诸如窗口,网页,用户控制,或数据模板。
- 视图定义包含的观点和他们的外观和感觉,可视布局和样式的控制。
- 视图通过其DataContext属性引用视图模型 。
- 在视图中的控制是绑定到由视图模型公开的属性和命令数据 。
- 该视图可以定制数据绑定视图和视图模型之间的行为。 对于例如,视图可使用值转换器来格式化将被显示在用户界面中的数据,或者它可以使用验证规则以提供额外的输入数据验证给用户。
- 视图定义和处理UI视觉行为,诸如可以从视图中的模型或通过用户与用户界面的交互的状态改变来触发动画或过渡。
- 视图的代码隐藏可以定义UI逻辑来实现视觉行为是难以在XAML以表达或需要在视图中定义的特定UI控件直接引用。
视图模型:
- 视图模型是一个非视觉类和不从任何WPF或Silverlight基类派生。
- 它封装,以支持应用程序的使用情况或用户任务所需的表示逻辑 。
- 视图模型是可测试的视图和模型的独立。
- 视图模型通常不直接引用视图 。 这将有UI友好实体,UI状态,动作和绑定到View公共属性。
- 它实现了性能和命令该视图可以数据绑定 。
- 它通知通过过变更通知事件的任何状态变化的观点
INotifyPropertyChanged
和INotifyCollectionChanged
接口。 - 与查看各种命令交互。
- 视图模型协调视图与模型交互 。
- 它可以转换或操纵数据,以便它可以由视图可以容易地消耗掉,并且可以实现另外的性质可能不存在于模型。
- 它也可以通过实现数据验证
IDataErrorInfo
或INotifyDataErrorInfo
接口。 - 视图模型可以定义逻辑状态,该视图可以在视觉上表示给用户。
- 调用服务的MVVM黑社会外部进行通信。
来源: http://code.msdn.microsoft.com/Design-Patterns-MVVM-Model-d4b512f0
文章来源: Nice and simple definition of WPF's MVVM