WPF MVVM模式

摘要:
MVVM模式的原理与MVC类似,只是中间的控制器被称为视图模型而不是控制器,其功能比控制器更复杂。原因是它继承了多个侦听接口。通常,使用数据驱动页面的原理是监视数据。只要一方改变,另一方也会改变。View和ViewModel通过数据和命令的绑定进行连接。这样,View和ViewModel的相关性很小,这是MVVM模型的优点。

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

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

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

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

流程:

  1. 用户点击View某个按钮

WPF MVVM模式第1张

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

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

WPF MVVM模式第2张

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

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

WPF MVVM模式第4张

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

WPF MVVM模式第5张

  1. EquipBoxs就是数据源,但后台怎么赋值的呢,在ViewModel中,定义了一个动态集合,跟list差不多。但是这个动态集合是双向绑定的,页面变化后台也就变了,原因也是因为实现了INotifyPropertyChanged接口。
    WPF MVVM模式第6张

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

WPF MVVM模式第7张

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

免责声明:文章转载自《WPF MVVM模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用Druid数据库连接池,配置ConfigFilter对数据库密码加密如何利用添加伪元素的办法自定义checkbox以及radio选框的样式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RTMP协议推流流媒体服务器/视频直播/点播平台EasyDSS获取直播列表接口(/live/list)详解

EasyDSS是TSINGSEE青犀视频研发的关于互联网视频直播/点播平台,能够接入RTMP协议摄像头及设备,并生成推流地址进行视频监控的推流直播。使用EasyDSS的用户都知道,我们提供了丰富的API接口,开发者可以自由进行二次开发,API接口详情:http://demo.easydss.com:10080/apidoc。 其中获取直播列表接口定义如下:...

WPF中使用WindowChrome自定义窗口中遇到的最大化问题

FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome.aspx 如果你是旧版本,可以去搜索单独的dll。 上方的页面,解释和例子也都是旧版本的,如果新版本,比如和我一样,是4.6.2...

Jmeter JAVA请求入门

一、Jmeter完成一个java请求实现方法 两种实现方式: 实现JavaSamplerClient接口 继承AbstractJavaSamplerClient抽象类 二、使用AbstractJavaSamplerClient抽象类编写java程序 1、核心步骤 1)创建一个Maven工程; 2)本地Maven库路径确认,添加pom.xml内容,编写依赖的...

postman测试wsdl类型接口

1IP地址来源搜索 WEB 服务 接口信息http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 2 设置接口调用地址 3 设置请求方式为post 4打开body编辑器,设置body类型“text/xml” 5设置请求体 6发送请求...

接口自动化之接口整理(抓包)

  陆续在几个公司都有接触过接口测试,每个公司的接口测试需求都差不多。但是,项目的大小会影响接口测试任务的简繁。   涉及到TCP协议的接口,也涉及到http协议的接口。   前段时间,刚接到一个走HTTP协议的接口测试需求。   开发提供过来的接口如下: test:  1. get_list  a. url - subject_id / complian...

WPF使用转换器(Converter)

1.作用:可以将源数据和目标数据之间进行特定的转化, 2.定义转换器,需要继承接口IValueConverter [ValueConversion(typeof(int), typeof(string))] public class ForeColorConverter : IValueConverter {...