简述WPF中MVVM的设计思想

近年来,随着WPF在生产、制造、工控等领域应用越来越广泛,对WPF的开发需求也在逐渐增多,有很多人不断的从Web、WinForm开发转向了WPF开发。

WPF开发有很多新的概念及设计思想,如数据驱动、数据绑定、依赖属性、命令、控件模板、数据模板以及MVVM模式等等,与传统的WinForm、ASP.NET WebForm开发有很大差异。

下面将简述WPF开发中MVVM的设计思想以及应用。

一、为什么要用MVVM?

传统WinForm开发的特点如下:

(1)一般采用事件驱动,也即用户点击事件,触发对应的事件

(2)通过唯一标识符获取页面上用户输入的数据进行业务逻辑处理

(3)用户输入(User Interface)和业务逻辑(Business)是紧密耦合在一起的,无法做到分离

(4)随着项目业务不断复杂化,这种高度耦合会出现前后端分工不明确,工作无法拆分的现象

因此,分层(如:MVC、MVVM),前后端分离,就成为必须面对的问题。

二、什么是MVVM?

MVVM是Model-VIew-ViewModel的简称,顾名思义模型-视图-视图模型,是一种用于解耦用户界面与业务逻辑的一种设计模式。借助于MVVM,可以在XAML中以声明方式定义UI,将UI使用数据绑定标到包含数据和命令的其它层。数据绑定提供数据和结构的松散耦合,使得UI和链接的数据保持同步,同时可以将用户输入路由到相应的命令。具体如下图所示:

1、View(用户界面):主要用于向使用者展示信息,并接收用户输入的信息(数据绑定)及响应用户的操作(Command);

2、ViewModel(用户视图业务逻辑):主要处理客户请求以及数据呈现;

3、Model(数据模型):作为存储数据的载体,是一个个具体的模型类,通过ViewModel进行调用,但在小型项目中,Model并不是必须的;

4、IService(数据接口):数据访问服务,用于获取各种类型数据的服务。数据的形式有很多种,如网络数据、本地数据、数据库数据,但在ViewModel调用时,都统一封装成了Service。在小型项目中,IService数据接口也不是必须的,不属于MVVM的范畴;

5、上图中,DataBase、Network、Local等标识不同的数据源形式,并不属于MVVM的范畴。

三、实现MVVM的前提条件

1、属性变更他通知:在MVVM思想中,由WinForm的事件驱动转变成了数据驱动。在C#中,普通的属性,并不具备变更通知功能,要实现变更通知功能,必须要实现INotifyPropertyChanged接口;

2、绑定命令:在WPF中,为了解决事件响应功能之间的耦合,提出了绑定命令思想,即命令可以以绑定的方式与控件建立联系,绑定命令必须实现ICommand接口;

在上述两个条件都满足后,如何将VIewMode中的具备变更通知的属性和命令,与View中的控件关联起来呢?答案是绑定(Binding)。

当View层的数据控件和具备通知功能的属性进行Binding后,Binding就会自动侦听来自接口的PropertyChanged事件,进而达到数据驱动UI的效果,可为"一桥飞架通南北,天堑变通途"。

四、MVVM实例

为了进一步感受MVVM的设计思想,验证上述的理论知识,以实例进行说明。本实例的项目架构如下所示:

相关推荐
code bean2 小时前
【WPF】WPF 项目实战:构建一个可增删、排序的光源类型管理界面(含源码)
wpf
lljss20206 小时前
C# 一个解决方案放一个dll项目,一个dll测试项目 ,调试dll项目的源码
c#
沉到海底去吧Go7 小时前
【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案
ocr·wpf·图片识别改名·图片识别重命名·图片内容改名
lph19727 小时前
自定义事件wpf
wpf
code bean11 小时前
【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法
wpf
ghost14314 小时前
C#学习第27天:时间和日期的处理
开发语言·学习·c#
jason成都14 小时前
c#压缩与解压缩-SharpCompress
开发语言·c#
傻啦嘿哟15 小时前
从零开始:用Tkinter打造你的第一个Python桌面应用
开发语言·c#
CodeCraft Studio16 小时前
PDF处理控件Aspose.PDF教程:在 C# 中更改 PDF 页面大小
前端·pdf·c#
InCerry17 小时前
.NET周刊【5月第4期 2025-05-25】
c#·.net·.net周刊