前面文章中, 我们已经知道, WPF 技术的主要特点是数据驱动 UI, 所以在使用 WPF 技术开发的过程中是以数据为核心的, WPF 提供了数据绑定机制, 当数据发生变化时, WPF 会自动发出通知去更新 UI
我们不管是 NET 中还是 WPF 中使用模式目的就是想达到高内聚低耦合在 WPF 开发中, 经典的编程模式是 MVVM, 是为 WPF 量身定做的模式, 该模式充分利用了 WPF 的数据绑定机制, 最大限度地降低了 Xmal 文件和 CS 文件的耦合度, 也就是 UI 显示和逻辑代码的耦合度, 如需要更换界面时, 逻辑代码修改很少, 甚至不用修改与 WinForm 开发相比, 我们一般在后置代码中会使用控件的名字来操作控件的属性来更新 UI, 而在 WPF 中通常是通过数据绑定来更新 UI; 在响应用户操作上, WinForm 是通过控件的事件来处理, 而 WPF 可以使用命令绑定的方式来处理, 耦合度将降低
一 MVVM 介绍
MVVM 是 Model-View-ViewModel(模型 - 视图 - 视图模型) 的缩写形式, 它通常被用于 WPF 或 Silverlight 开发我们可以通过下图来直观的理解 MVVM 模式:
1View 就是用 xaml 实现的界面, 负责与用户交互, 接收用户输入, 把数据展现给用户
2ViewModel 是一个 C# 类, 负责收集需要绑定的数据和命令, 聚合 Model 对象, 通过 View 类的 DataContext 属性绑定到 View, 同时也可以处理一些 UI 逻辑
3Model, 就是系统中的对象, 可包含属性和行为
三者之间的关系: View 对应一个 ViewModel,ViewModel 可以聚合 N 个 Model,ViewModel 可以对应多个 View
二 MVVM 的优势
MVVM 的根本思想就是界面和业务功能进行分离, View 的职责就是负责如何显示数据及发送命令, ViewModel 的功能就是如何提供数据和执行命令各司其职, 互不影响在实际的业务场景中我们经常会遇到客户对界面提出建议要求修改, 使用 MVVM 模式开发, 当设计的界面不满足客户时, 我们仅仅只需要对 View 作修改, 不会影响到 ViewModel 中的功能代码, 减少了犯错的机会随着功能地增加, 系统越来越复杂, 相应地程序中会增加 View 和 ViewModel 文件, 将复杂的界面分离成局部的 View, 局部的 View 对应局部的 ViewModel, 功能点散落在各个 ViewModel 中, 每个 ViewModel 只专注自己职能之内的事情 ViewModel 包含了 View 要显示的数据, 并且知道 View 的交互代码, 所以 ViewModel 就像一个无形的 View 使用 MVVM 架构具有以下优势
1 易维护
2 灵活扩展
3 易测试
4 用户界面设计师与程序开发者能更好的合作
三 MVVM 简单示例
为了让大家直观地了解 MVVM 的编程模式, 下面会用到前面讲到的数据绑定以及命令等知识
新建 WPF 项目, 名称 WPFMVVMDemo 添加用户类, 如下图
在 WPF 术语中, 这个叫模型, GUI 是视图不可思议的是视图模型, 通过数据绑定将它们绑在一起, 它真的是一个很好的适配器能将模型变成某种 WPF 框架可以使用的东西所以这个就是模型
接下来我们会非常容易理解创建视图模型:
请注意这个视图模型不是十分正确的因为我们在视图模型里暴露了属性, 我们显然会想使在代码里改变的用户名和公司名自动的显示在视图上
后台代码:
运行结果:
这里我们点击更新按钮不会有任何反应, 因为还没有实现数据绑定此时视图不会收到任何的关于属性改变的通知要解决这个问题我们必须实现名称为 INotifyPropertyChanged 的接口任何实现了这个接口的类, 当属性发生改变的时候会通知所有监听者, 所以我们需要修改视图模型 NameViewModel 类:
这里会产生多个事件首先, 我们检查了我们是否真的改变了属性第二, 如果值已经改变, 我们向所有监听者注册 PropertyChanged 事件现在我们有了一个模型 Name 和一个视图模型 NameViewModel 我们只需要在定义视图只需要修改视图 MainWindow:
运行结果:
本文的 demo 下载地址: WPFMVVMDemo1.zip
https://pan.baidu.com/s/18hKaRqZI1nwGgu_G0Qz84Q https://pan.baidu.com/s/18hKaRqZI1nwGgu_G0Qz84Q 密码: 8888
来源: https://www.cnblogs.com/fly-bird/p/8699105.html