在MVVM模式中,View封装UI和UI逻辑,viewmodel封装presentation逻辑,model封装业务逻辑和数据。

View类

View的责任是定义屏幕上的结构和外观,在完美的情况下,view的code behind只包含一个构造函数,这个构造函数调用InitializeComponent()函数,但是通常情况下,code behind会包含XAML标签难以表达的UI逻辑代码,所谓UI逻辑代码是指跟显示行为相关而不包含任何其它逻辑的代码,例如:复杂动画或者直接操纵view中可视化元素的代码,

view通过数据绑定与它的数据上下文交互,在MVVM模式中,view的数据上下文被置于viewmodel中,viewmodel实现了view数据绑定所需要的properties和commands,同时通过change notification events通知视图其状态的变化。view跟viewmodel的典型关系是1对1。

总结一下,view具有以下特性:

  • view是一个可视化元素,例如window、page、user control、view定义了包含在其中的控件以及这些控件的布局和样式。
  • view通过DataContext属性引用它的view model,view中的控件绑定到view model中的property和command。
  • view可以定制和view model绑定的行为,例如,view可以使用converter格式化显示在UI上的数据,也可以使用validation rules对用户的输入进行验证。
  • view可以定义和处理UI可视化的行为,例如由viewmodel中状态变化或者用户交互引起的动画或者变换。
  • view的code behind可以定义UI逻辑来实现XAML难以表达的可视化行为或者直接操纵view中可视化元素的行为。

View Model类

View model定义presentation logic和view所需要的数据,它不引用view而且对view的实现一无所知,view model实现view用于绑定的properties和commands,并且使用change notification events通知视图其状态的变化,properties和commands定义了UI所需的功能,而view决定了如何展现这些功能。

View model的责任是协调view和所需model的交互,通常情况下,view model和model是1对n的关系,view model可以选择将model类直接暴露给view类,使得view中的控件能直接绑定到model,在这种情况下,model类需要被设计成支持数据绑定和相应的通知机制。

总结一下,view model具有以下特性:

  • view model封装presentation logic来支持应用所需的use case。
  • view model不直接引用view,它实现view用于绑定的properties和commands,并且使用change notification events通知视图其状态的变化.
  • view model协调view和model的交互。
  • view model可以定义view呈现所需的逻辑状态。

Model类

Model封装业务逻辑和数据。它代表应用程序的领域模型在客户端的表现,既包括客户端领域实体也包括客户端领域逻辑,因此是一个非常广泛的概念。

总结一下,model具有以下特性:

  • Model封装业务逻辑和数据,它负责管理应用程序数据和封装业务逻辑和验证逻辑保证数据的一致性。
  • model不直接引用view和view model。
  • model类通常提供属性或者集合change notification events,方便和view的绑定。
  • model类通常使用IDataErrorInfo接口和INotifyDataErrorInfo接口提供数据验证和错误报告。
  • model通常和service或者repository一起使用。

MVVM基础概念和理解的更多相关文章

  1. Lua语言自学之01.基础概念的理解

    编程不只是这么简单,它的思维是理性的编程思维,操纵机器干事本来就不是一件简单的事,要干什么,该怎么做,怎么做得才好. 脚本的概念在程序中十分重要,在游戏开发领域,它更是决定性的.脚本语言让程序员可以区 ...

  2. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  3. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  5. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  6. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  7. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

  8. 什么是JavaScript闭包终极全解之一——基础概念

    本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...

  9. Elasticsearch教程之基础概念

    基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 1.接近实时(NRT)        Elasticsearch是一个接近实时的搜索平台.这意味 ...

随机推荐

  1. JS事件 内容选中事件(onselect)选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。

    内容选中事件(onselect) 选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行. 如下代码,当选中用户文本框内的文字时,触发onselect 事件, ...

  2. for循环和字典预习

    print("*" *8)for a in range(1,9): print(a,end="")#1-9的奇数print()for a in range(1, ...

  3. C/C++ ShowWindow()

    { ShowWindow(HWND,0);//不显示窗口 }

  4. mac 10.9 install cocoapods issue

    If you've installed the OS X Mavericks Beta and you're having ruby issues like this: /System/Library ...

  5. 出现不不能引java.util.Date包的情况

    出现不不能引java.util.Date包的情况 那个时间段不能引,IDE的bug,等一会儿就好了 心得:很多时候没必要和bug死磕,因为真的不是你的问题.

  6. mysql重点,表查询操作和多表查询

    表单查询 1. 完整的查询语句语法 select distinct(* or 字段名 or 四则运算 )from 表名 where 条件 group by 条件 having 条件 order by ...

  7. 9个搜索引擎优化(SEO)最佳实践

    作为网页设计师,搜索引擎优化重要吗?我们知道,网站设计是把屏幕上平淡无奇变成令人愉快的美感,更直观地辨认信息.这也是人与人之间在沟通想法,这样的方式一直在演变. 1. 网站结构 对于搜索引擎优化,网站 ...

  8. 第十二篇:随手记一下javaBean的setter,getter方法的命名问题

    今天测试新写的一个系统表的完整Ibatis配置和调用,因为经验少,到处撞墙...其他的坑爹问题就不提了 测试sqlMapClient.queryForList("...",para ...

  9. 6_2.springboot2.x整合Druid和配置数据源监控

    简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss Data ...

  10. python-包管理工具-pip

    目录 Python pip pip相关命令 解决pip相关问题 Python pip回到顶部 Python最让人的喜欢的就是它有丰富的类库和各种第三方的包,而对于这些包的下载.删除等管理操作,就要用到 ...