WPF MVVM模式

什么是MVVM模式,Model(模型)-View(视图)-ViewModel(视图模型)

先来说MVC模式,模型-视图-控制器,相信大多数人都用过原理无非是:sql

页面产生某个请求,先找到页面对应的控制器,而后触发控制器的方法,控制器去模型调取数据拿回来,再返回给相应的视图,最后呈现页面。数据库

MVVM模式原理相似MVC,只不过中间的不叫控制器了叫视图模型,功能也比Controller复杂了一些,缘由就多继承了一个监听接口。mvvm

流程:ui

  1. 用户点击View某个按钮

学过Winform都知道,点击Button有Click事件,这个你暂且把它看成事件(指令)好了,你当点击保存按钮会触发SaleCommand指令这是你本身在后台定义的,Command="{Binding SaleCommand}"的意思就是绑定的指令是SaleCommand。this

  1. View点击以后保存触发SaleCommand,这就传到了ViewModel

相似于Winform,在点击事件里写你要的方法。这里一样指定了方法是OnSaleCommand。而后执行方法,我这里写的sql语句,实现数据库更新,业务大了不可能每一个页面都写SQL,就须要用到接口、IOC等等,实现解耦。
3d

  1. 保存到结果以后,会将结果返回,好比一个list ,可是这个Model继承了一个 INotifyPropertyChanged接口,这个接口是干吗用的呢,用来监测属性的变化,也是实现双向绑定必须继承的接口。当我Model里某个字段值发生变化,Set会触发,将结果展现在页面上,一样页面发生变化,也会将值传给后台。

  1. 相似于Winform的GridView绑定数据源是this.gridView.ItemSourse=数据源。WPF中也是同样。

  1. EquipBoxs就是数据源,但后台怎么赋值的呢,在ViewModel中,定义了一个动态集合,跟list差很少。可是这个动态集合是双向绑定的,页面变化后台也就变了,缘由也是由于实现了INotifyPropertyChanged接口。
    双向绑定

  2. 当页面发生改变时自动获取属性值,而后经过服务层修改到数据库。查询的时候也能够将查到的list集合,转化成ObservableCollection动态集合,而后就自动更新了。orm

总的来讲,利用数据驱动页面的原理就是对数据进行了监听,只要有一方改变,另外一方也随之变化,View和ViewModel都是经过数据和命令的绑定联通的,这样View和ViewModel关联性就不大,这就是MVVM模式的好处。blog