WPF真入门教程29--MVVM常用框架之MvvmLight

news2024/11/13 15:25:22

1、MVVM模式回顾 

关于mvvm模式的基础知识,请看这2个文章:

WPF真入门教程23--MVVM简单介绍

WPF真入门教程24--MVVM模式Command命令

做过VUE开发或微信小程序开发的伙伴,就知道MVVM模式,核心就是数据驱动控件,全栈开发人员更是知道什么是前后端分离技术,在windows开发中的WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI。使用MVVM架构具有以下优势:1、易维护 2、灵活扩展  3、易测试  4、用户界面设计师与程序开发者能更好的合作。

此图能较好地说明MVVM架构思想

MVVM中,各个部分的职责如下:

Model:负责数据实体的结构处理,与ViewModel进行交互;

View:负责界面显示,与ViewModel进行数据和命令的交互;

ViewModel:负责前端视图业务级别的逻辑结构组织,并将其反馈给前端

2、MVVM开源框架介绍

在WPF中,有几个常用的MVVM(Model-View-ViewModel)开源框架,这些框架提供了方便的工具和模式来帮助开发人员实现MVVM架构。以下是几个常用的MVVM开源框架:

1. Prism:Prism是一个由微软模式和实践团队开发的开源框架,它提供了一套用于开发可扩展、可测试和可维护的WPF应用程序的工具和指南。Prism提供了解耦视图、模型和视图模型的机制,以及用于导航、命令、事件聚合等常用功能。

2. Caliburn.Micro:Caliburn.Micro是一个轻量级的MVVM框架,它使用约定优于配置的原则,通过简化开发者的工作流程来提高开发效率。Caliburn.Micro提供了强大的数据绑定、命令绑定、导航和事件聚合等功能。

3. MVVM Light:MVVM Light是一个简化MVVM开发的框架,它提供了一套轻量级的工具和库,包括视图模型的基类、消息传递机制、事件聚合、导航等功能。MVVM Light支持多个平台,包括WPF、UWP、Xamarin等。

4. ReactiveUI:ReactiveUI是一个基于响应式编程的MVVM框架,它使用了Reactive Extensions(Rx)库来处理异步和事件驱动的编程。ReactiveUI提供了一种声明性的方式来处理数据流和交互,使代码更加简洁和可维护。

这些MVVM开源框架都有自己的特点和适用场景,您可以根据自己的需求和偏好选择其中之一来开发WPF应用程序。此外,这些框架都有详细的文档和示例代码,可以帮助您更好地了解和使用它们

3、了解MvvmLight框架

关于MvvmLight框架,Light的意思是指非常快,所以他是一个快速开发MVVM程序,非常轻量化,请看这2个地址

官网:http://www.mvvmlight.net/

源码地址:https://github.com/lbugnion/mvvmlight

简介:可以帮助快速的开发MVVM应用程序(WPF、Xarmarin、UWP、SilverLight),帮助开发将视图与模型分开创建更简洁、易于维护的扩展的应用程序。

MVVMLight框架的优点:

1. 轻量级:MVVMLight框架是一个轻量级的框架,不需要太多的学习和使用成本。

2. 易于使用:MVVMLight框架提供了很多方便的工具和类,可以帮助开发人员快速地实现MVVM架构。

3. 可扩展性:MVVMLight框架是可扩展的,可以根据需要添加自定义的功能和模块。

4. 支持多平台:MVVMLight框架可以用于多个平台,如WPF、UWP、Xamarin等。

5. 社区支持:MVVMLight框架有一个活跃的社区支持,可以获得很多有用的信息和帮助。

MVVMLight框架的缺点:

1. 过于简单:MVVMLight框架虽然简单易用,但有时候可能不能满足复杂的业务需求。

2. 依赖注入不完整:MVVMLight框架的依赖注入功能相对不完整,需要使用第三方库来实现。

3. 缺乏文档和教程:MVVMLight框架的文档和教程相对较少,对于初学者可能不够友好。

4. 对于大型项目不够适用:MVVMLight框架适合小型和中型项目,但对于大型项目可能不够适用。

总之,MVVMLight框架是一个轻量级、易于使用、可扩展和支持多平台的框架,但对于复杂的业务需求和大型项目可能不够适用,而且缺乏文档和教程。

 MVVM Light框架的核心是ViewModelBase类,它实现了INotifyPropertyChanged接口,用于通知视图层数据的变化。此外,MVVM Light还提供了一些实用的类和工具,如Messenger类用于跨ViewModel传递消息,Command类用于处理用户交互事件等。

MVVMLight的作者Laurent Bugnion 是个微软MVP,有趣的是,MVVMLight的产品Logo是一根羽毛,寓意了他的优点:轻量、专业、高效。

4、获取MvvmLight框架

1、创建项目

2、在Nuget中搜索MvvmLight进行安装

 

注意看项目文件目录的变化 

安装完成后,在项目目录里自动生成了ViewModel文件夹,生成两个文件,一个MainViewModel.cs可以作为MainWindow的viewModel,另一个ViewModelLocator.cs作为ViewModel定位器,通过Ioc容器,在改文件中获取ViewModel的实例。 

打开ViewModelLocator.cs文件,发现文件中有报错,这时只需要删除using Microsoft.Practices.ServiceLocation;这句话,然后重新引用using CommonServiceLocator;

快速操作,把错误先消除

 

3、App.xaml文件的变化

App.xaml中增加了一个Locator,可以作为静态资源使用,用于后面绑定

所以注意:第一次添加时,需要自己处理两个异常,一个是删除引用,一个是添加引用 

5、MvvmLight框架基础库

1、GalaSoft.MvvmLight.dll

主要命名空间:

GalaSoft.MvvmLight:最顶层的命名空间,MvvmLight的主体,核心功能 主要对象:ObservableObject、ViewModelBase(实现数据通知相关的内容)、ICleanup

GalaSoft.MvvmLight.Command:主要包含依赖命令的定义 主要对象:RelayCommand、RelayCommand<> 对Icommand的封装

GalaSoft.MvvmLight.Helpers:框架辅助类,供框架内部使用

GalaSoft.MvvmLight.Messaging:消息类,提供全局的消息通知,可以理解为全局的Event事件, 主要对象:Messenger、 NotificationMessage

GalaSoft.MvvmLight.Views:与应用里面的View紧密结合 主要对象:IDialogService、 INavigationService

2、GalaSoft.MvvmLight.Extras.dll

主要命名空间:GalaSoft.MvvmLight.IoC:依赖注入使用的容器 主要对象: ISimpleIoc、SimpleIoC实现

3、GalaSoft.MvvmLight.Platform.dll

主要命名空间: GalaSoft.MvvmLight.Command 主要对象:事件绑定时候,需要传递事件参数EventArgs:EventToCommand GalaSoft.MvvmLight.Threading 主要对象: DispatcherHelper

6、MvvmLight基本对象介绍与使用

1、框架对象ViewModelLocatorr的作用

 要将MainViewModelMainWindow绑定起来,只需要在MainWindow上增加绑定DataContext="{Binding Source={StaticResource Locator},Path=Main}",如下所示

2、绑定测试 

给界面增加一些控件,一个textblock,一个textbox,一个button

 

 viewmodel绑定

  

 

 将代码改成这样

 3、新ViewModel绑定

1、创建一个新的窗体

 2、添加viewmodel,AirViewModel

      ICommand和RelayCommand类型的命令都可以,RelayCommand是ICommand的实现类

 3、添加样式资源

 4、ViewModelLocator.cs修改

注册了容器实例对象后,才可以在xaml文件中指定

5、修改mainviewmodel代码

 

6、启动程序 

 

 

RaisePropertyChanged实现了基本INotifyPropertyChanged接口基本的属性变化推送,命令动态更新前台的数据,这就是MVVM,这就是MVVMLIGHT。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1468677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java集合--List集合的基本用法

一、ArrayList集合 1.ArrayList集合的特点 2.ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素&#xff0c;index从0开始。 public class Test {public static …

【NTN 卫星通信】基于NTN和TN的Inter-PLMN海事应用场景

1 场景概述 NTN和TN联合组网的场景&#xff0c;可以有多种应用方式&#xff0c;以下用例描述了同时使用多个卫星PLMN和一个地面5G PLMN的海事场景。 MNO-G是一家成熟的卫星PLMN运营商&#xff0c;运营着几颗GEO卫星。MNO-L是一个相对较新的卫星PLMN运营商&#xff0c;操作LEO卫…

【解决(几乎)任何机器学习问题】:特征选择

当你创建了成千上万个特征后&#xff0c;就该从中挑选出⼏个了。但是&#xff0c;我们绝不应该创建成百上千个⽆⽤的特征。特征过多会带来⼀个众所周知的问题&#xff0c;即 "维度诅咒"。如果你有很多特征&#xff0c;你也必须有很多训练样本来捕捉所有特征。什么是 …

Guitar Pro8.2吉他乐谱软件功能测评评价

Guitar Pro 8.2吉他乐谱软件全面评价 Guitar Pro 8.2作为一款吉他乐谱软件&#xff0c;已经得到了广大吉他手和音乐制作人的认可。作为软件评价专家&#xff0c;我对这款软件进行了全面的体验和分析&#xff0c;以下是我在易用性、功能丰富性、用户界面设计、稳定性以及性价比…

【MATLAB源码-第146期】基于matlab的信源编码仿真GUI,对比霍夫曼编码,算术编码和LZ编码。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 霍夫曼编码、算术编码和LZ编码是三种广泛应用于数据压缩领域的编码技术。它们各自拥有独特的设计哲学、实现方式和适用场景&#xff0c;因此在压缩效率、编解码速度和内存使用等方面表现出不同的特点。接下来详细描述这三种编…

open3d 将点云投影到平面

open3d 将点云投影到平面 一、算法原理二、代码三、结果展示1.原点云2.点云数据向x z 0投影 四、相关数据 一、算法原理 假设点&#xff08;x0, y0, z0&#xff09;, 平面方程为 mx ny sz d 0 过点&#xff08;x0, y0, z0&#xff09;&#xff0c;且垂直平面的直线方程…

TensorRT及CUDA自学笔记006 PTX、PTX兼容性及二进制兼容性

TensorRT及CUDA自学笔记006 PTX、PTX兼容性及二进制兼容性 PTX定义 PTX是CUDA平台的一种虚拟机器和指令集&#xff0c;可以理解为一种CUDA平台的汇编语言使用C编写的CUDA程序首先被转换成PTX指令集&#xff0c;PTX指令在经过优化后再转换为特定GPU架构对应的指令集&#xff0…

关于Arrays类中asList(T... a)泛型参数辨析

前提 我们需要知道两点 &#xff08;1&#xff09;T指的是泛型类型&#xff0c;它只能是引用类型&#xff0c;何为引用类型&#xff1f;在java中除了基本数据类型&#xff08;如byte、short、int、long、float、double、boolean、char&#xff09;之外的所有类型都是引用类型…

STL - 并查集

1、并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合&#xff1b;开始时&#xff0c;每个元素自成一个 单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并&#xff1b;在此过程中要反复用到查询某一 个元素归属于那个集合的…

YOLOv5改进 | SPPF篇 | 利用YOLOv9最新的SPPELAN模块改进SPPF(全网独家创新,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的SPPELAN模块来改进SPPF&#xff0c;其中YOLOv9针对于这个模块并没有介绍&#xff0c;只是在其项目文件中用到了&#xff0c;我将其整理出来用于我们的YOLOv5的项目&#xff0c;同时空间金字…

vue3中ref创建变量取值时自动补充 .value 插件 volar

插件 TypeScript Vue Plugin (Volar) 设置中配置

自然语言处理中关键概念——词嵌入(Word Embedding)

词嵌入&#xff08;Word Embedding&#xff09;是一种在自然语言处理中广泛使用的表示方法&#xff0c;它将离散的词汇表中的每个词转换为一个连续向量空间中的稠密向量。这种低维度实数向量能够捕捉词语之间的语义和句法关系。 通过训练神经网络模型&#xff08;如word2vec、G…

一周学会Django5 Python Web开发-Http请求HttpRequest请求类

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

open3d KD-Tree K近邻点搜索

open3d KD-Tree K近邻点搜索 一、算法原理1.KD-Tree 介绍2.原理 二、代码三、结果1.原点云2.k近邻点搜索后的点云 四、相关数据 一、算法原理 1.KD-Tree 介绍 kd 树或 k 维树是计算机科学中使用的一种数据结构&#xff0c;用于在具有 k 维的空间中组织一定数量的点。它是一个…

【Django开发】0到1开发美多shop项目:短信验证码和RabbitMQ。全md文档笔记(附代码 文档)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

开源世界的学术问题

自由软件基金会是1983年成立的&#xff0c;到现在是41年。正好很有意思的是&#xff0c;在去年还有一篇文章&#xff08;CSDN 的翻译&#xff09;&#xff0c;专门在质疑说成立 40 年的自由软件基金会是不是已经快不行了&#xff0c;所以我们会用这个标题叫做兴衰发展历程来介绍…

Windows安装HBuilderX

下载 HBuilderX下载地址: 下载地址 解压安装包 HBuilderX&#xff0c;Windows为zip包&#xff0c;解压后才能使用。 首先&#xff0c;选中下载的zip包&#xff0c;点击右键菜单&#xff0c;点击解压到当前文件夹进入解压后的文件夹&#xff0c;找到HBuilderX.exe&#xff0…

OpenFeign整合Sentinel

OpenFeign 整合 Sentinel 实现服务降级 引入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- nacos服务发现 --><depen…

抖音数据抓取工具|短视频下载工具|视频内容提取软件

一、开发背景&#xff1a; 随着抖音平台的流行&#xff0c;越来越多的人希望能够下载抖音视频以进行个人收藏或分享。然而&#xff0c;目前在网上找到的抖音视频下载工具功能单一&#xff0c;操作繁琐&#xff0c;无法满足用户的需求。因此&#xff0c;我们决定开发一款功能强大…

unity Aaimation Rigging使用多个约束导致部分约束失去作用

在应用多个约束时&#xff0c;在Hierarchy的顺序可能会影响最终的效果。例如先应用了Aim Constraint&#xff0c;然后再应用Two Bone Constraint&#xff0c;可能会导致Two Bone Constraint受到Aim Constraint的影响而失效。因此&#xff0c;在使用多个约束时&#xff0c;应该仔…