WPF自学入门(十)WPF MVVM简单介绍

   前面文章中,咱们已经知道,WPF技术的主要特色是数据驱动UI,因此在使用WPF技术开发的过程当中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI。 编程

  咱们不论是NET中仍是WPF中使用模式目的就是想达到高内聚低耦合。在WPF开发中,经典的编程模式是MVVM,是为WPF量身定作的模式,该模式充分利用了WPF的数据绑定机制,最大限度地下降了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如须要更换界面时,逻辑代码修改不多,甚至不用修改。与WinForm开发相比,咱们通常在后置代码中会使用控件的名字来操做控件的属性来更新UI,而在WPF中一般是经过数据绑定来更新UI;在响应用户操做上,WinForm是经过控件的事件来处理,而WPF可使用命令绑定的方式来处理,耦合度将下降。架构

1、MVVM介绍框架

  MVVM是Model-View-ViewModel(模型-视图-视图模型)的缩写形式,它一般被用于WPF或Silverlight开发。咱们能够经过下图来直观的理解MVVM模式:  测试

 

  一、View就是用xaml实现的界面,负责与用户交互,接收用户输入,把数据展示给用户。设计

  二、ViewModel是一个C#类,负责收集须要绑定的数据和命令,聚合Model对象,经过View类的DataContext属性绑定到View,同时也能够处理一些UI逻辑。3d

  三、Model,就是系统中的对象,可包含属性和行为。orm

  三者之间的关系:View对应一个ViewModel,ViewModel能够聚合N个Model,ViewModel能够对应多个View对象

2、MVVM的优点blog

      MVVM的根本思想就是界面和业务功能进行分离,View的职责就是负责如何显示数据及发送命令,ViewModel的功能就是如何提供数据和执行命令。各司其职,互不影响。在实际的业务场景中咱们常常会遇到客户对界面提出建议要求修改,使用MVVM模式开发,当设计的界面不知足客户时,咱们仅仅只须要对View做修改,不会影响到ViewModel中的功能代码,减小了犯错的机会。随着功能地增长,系统愈来愈复杂,相应地程序中会增长View和ViewModel文件,将复杂的界面分离成局部的View,局部的View对应局部的ViewModel,功能点散落在各个ViewModel中,每一个ViewModel只专一本身职能以内的事情。ViewModel包含了View要显示的数据,而且知道View的交互代码,因此ViewModel就像一个无形的View。使用MVVM架构具备如下优点接口

一、易维护

二、灵活扩展

三、易测试

四、用户界面设计师与程序开发者能更好的合做

 

3、MVVM简单示例

      为了让你们直观地了解MVVM的编程模式,下面会用到前面讲到的数据绑定以及命令等知识。

     新建WPF项目,名称WPFMVVMDemo。添加用户类,以下图

 

      在WPF术语中,这个叫“模型”,GUI是“视图”。难以想象的是“视图模型”,经过数据绑定将它们绑在一块儿,它真的是一个很好的适配器能将模型变成某种WPF框架可使用的东西。因此这个就是“模型”。

      接下来咱们会很是容易理解建立视图模型:

 

      请注意这个视图模型不是十分正确的。由于咱们在视图模型里暴露了属性,咱们显然会想使在代码里改变的用户名和公司名自动的显示在视图上

 

后台代码:

 

运行结果:

 

       这里咱们点击更新按钮不会有任何反应,由于尚未实现数据绑定。此时视图不会收到任何的关于属性改变的通知。要解决这个问题咱们必须实现名称为INotifyPropertyChanged的接口。任何实现了这个接口的类,当属性发生改变的时候会通知全部监听者,因此咱们须要修改视图模型NameViewModel类:

 

      这里会产生多个事件。首先,咱们检查了咱们是否真的改变了属性。第二,若是值已经改变,咱们向全部监听者注册PropertyChanged事件。如今咱们有了一个模型Name和一个视图模型NameViewModel。咱们只须要在定义视图。只须要修改视图MainWindow:

 

运行结果:

本文的demo下载地址:WPFMVVMDemo1.zip

相关文章
相关标签/搜索