WPF中MVVM工具包 CommunityToolkit.Mvvm
CommunityToolkit.Mvvm,也称为MVVM工具包,是Microsoft Community Toolkit的一部分。它是一个轻量级但功能强大的MVVM(Model-View-ViewModel)库,旨在帮助开发者更容易地实现MVVM设计模式。
特点
- 独立于平台和运行时:支持.NET Standard 2.0、.NET Standard 2.1 和 .NET 6,与UI框架无关,可在UWP、WinForms、WPF、Xamarin、Uno等平台上使用。
- 易于选取和使用:对应用程序结构或编码范例没有严格需求,可以灵活使用。
- 按需取用:自由选择要使用的组件,所有类型都是松散耦合的。
- 引用实现:为基类库中包含的接口提供实现,但缺少直接使用它们所需的具体类型。
用法
- 安装:在Visual Studio中,通过NuGet包管理器搜索并安装
CommunityToolkit.Mvvm包, - 引用:在项目中添加
using CommunityToolkit.Mvvm;来使用新API。 - 实现MVVM:通过继承
ObservableObject来创建ViewModel,利用SetProperty方法实现属性变更通知,以及使用RelayCommand或AsyncRelayCommand来实现命令模式。
功能
该库提供了一些基础类和接口的实现,主要包括:
- ObservableObject 和 ObservableRecipient:这些类实现了
INotifyPropertyChanged接口,并提供了SetProperty方法,可以在属性值改变时触发PropertyChanged事件,简化数据绑定。 - ICommand接口的实现,如RelayCommand和AsyncRelayCommand:这些类可以帮助创建命令,命令是MVVM模式中的一个重要组成部分。
- IMessenger和相关消息传递机制,如WeakReferenceMessenger和StrongReferenceMessenger,用于组件间的松散耦合通信。
CommunityToolkit.Mvvm 包含的类型主要分为以下几个部分:
-
CommunityToolkit.Mvvm.ComponentModel
ObservableObject:实现了INotifyPropertyChanged接口,用于创建响应属性变化的ViewModel。ObservableRecipient:用于消息传递的基类。ObservableValidator:用于数据验证的基类。
-
CommunityToolkit.Mvvm.DependencyInjection
Ioc:提供依赖注入的容器和相关服务。
-
CommunityToolkit.Mvvm.Input
RelayCommand:一个简单的命令实现,用于执行无参方法。RelayCommand<T>:一个泛型版本的RelayCommand,用于执行带参方法。AsyncRelayCommand:一个异步命令实现,用于执行异步无参方法。AsyncRelayCommand<T>:一个异步命令实现,用于执行异步带参方法。IRelayCommand:RelayCommand的接口定义。IRelayCommand<T>:RelayCommand<T>的接口定义。IAsyncRelayCommand:AsyncRelayCommand的接口定义。IAsyncRelayCommand<T>:AsyncRelayCommand<T>的接口定义。
-
CommunityToolkit.Mvvm.Messaging
IMessenger:消息传递接口,定义了消息发送和订阅的方法。WeakReferenceMessenger:一个使用弱引用的消息传递类,用于避免内存泄漏。StrongReferenceMessenger:一个使用强引用的消息传递类。IRecipient<TMessage>:消息接收者接口,用于接收特定类型的消息。MessageHandler<TRecipient, TMessage>:消息处理程序,用于处理特定类型的消息。
-
CommunityToolkit.Mvvm.Messaging.Messages
PropertyChangedMessage<T>:用于属性变化的消息。RequestMessage<T>:用于请求特定类型响应的消息。AsyncRequestMessage<T>:异步版本的RequestMessage<T>。CollectionRequestMessage<T>:用于集合操作的请求消息。AsyncCollectionRequestMessage<T>:异步版本的CollectionRequestMessage<T>。ValueChangedMessage<T>:用于值变化的消息。
CommunityToolkit.Mvvm 还提供了一些关键属性和功能
-
ObservableObject
ObservableObject是CommunityToolkit.Mvvm库中的一个基础类,它实现了INotifyPropertyChanged接口。这个接口是 .NET 数据绑定基础架构的一部分,当对象的一个属性改变时,它会通知绑定到该属性的任何元素。- 用法:ViewModel 通常会继承自
ObservableObject类。 - 示例代码:
public class MyViewModel : ObservableObject {private string _myProperty;public string MyProperty{get => _myProperty;set => SetProperty(ref _myProperty, value);} }
-
[ObservableProperty] 属性
[ObservableProperty]是一个特性(Attribute),用于自动生成可观察属性的 getter 和 setter,这些属性会在值改变时触发PropertyChanged事件。- 用法:直接在 ViewModel 的属性上使用
[ObservableProperty]特性。 - 示例代码:
这将生成一个类似下面的可观察属性:public partial class MyViewModel : ObservableObject {[ObservableProperty]private string? _name; }public string? Name {get => _name;set => SetProperty(ref _name, value); }
-
[RelayCommand] 属性
[RelayCommand]是一个特性,用于创建命令。命令是 MVVM 模式中的一个重要组成部分,用于将 View 的行为(如按钮点击)绑定到 ViewModel 中的方法。- 用法:在 ViewModel 中的方法上使用
[RelayCommand]特性。 - 示例代码:
这将生成一个public partial class MyViewModel : ObservableObject {[RelayCommand]private void ExecuteCommand(){// Command execution logic here} }ICommand实现,可以被 View 绑定。
其他属性
-
RelayCommand 和 AsyncRelayCommand:
- 这些类实现了
ICommand接口,用于创建命令,是 MVVM 模式中命令模式的实现。
- 这些类实现了
-
IMessenger:
- 消息传递接口,用于在不同的 ViewModel 或 View 之间传递消息,实现组件间的松散耦合通信。
-
PropertyChangedMessage<T>:
- 用于属性变化的消息,是
IMessenger接口实现中用于传递属性变更通知的一种消息类型。
- 用于属性变化的消息,是
-
RequestMessage<T> 和 AsyncRequestMessage<T>:
- 用于请求特定类型响应的消息,其中
AsyncRequestMessage<T>是异步版本的请求消息。
- 用于请求特定类型响应的消息,其中
-
CollectionRequestMessage<T> 和 AsyncCollectionRequestMessage<T>:
- 用于集合操作的请求消息,其中
AsyncCollectionRequestMessage<T>是异步版本的集合请求消息。
- 用于集合操作的请求消息,其中
-
ValueChangedMessage<T>:
- 用于值变化的消息,是
IMessenger接口实现中用于传递值变更通知的一种消息类型。
- 用于值变化的消息,是
CommunityToolkit.Mvvm 的框架类
-
CommunityToolkit.Mvvm.ComponentModel
ObservableObject:实现了INotifyPropertyChanged和INotifyPropertyChanging接口,用于创建响应属性变化的 ViewModel。ObservableRecipient:用于消息传递的基类。ObservableValidator:用于数据验证的基类。
-
CommunityToolkit.Mvvm.DependencyInjection
Ioc:提供依赖注入的容器和相关服务。
-
CommunityToolkit.Mvvm.Input
RelayCommand:一个简单的命令实现,用于执行无参方法。RelayCommand<T>:一个泛型版本的RelayCommand,用于执行带参方法。AsyncRelayCommand:一个异步命令实现,用于执行异步无参方法。AsyncRelayCommand<T>:一个异步命令实现,用于执行异步带参方法。IRelayCommand:RelayCommand的接口定义。IRelayCommand<T>:RelayCommand<T>的接口定义。IAsyncRelayCommand:AsyncRelayCommand的接口定义。IAsyncRelayCommand<T>:AsyncRelayCommand<T>的接口定义。
-
CommunityToolkit.Mvvm.Messaging
IMessenger:消息传递接口,定义了消息发送和订阅的方法。WeakReferenceMessenger:一个使用弱引用的消息传递类,用于避免内存泄漏。StrongReferenceMessenger:一个使用强引用的消息传递类。IRecipient<TMessage>:消息接收者接口,用于接收特定类型的消息。MessageHandler<TRecipient, TMessage>:消息处理程序,用于处理特定类型的消息。
-
CommunityToolkit.Mvvm.Messaging.Messages
PropertyChangedMessage<T>:用于属性变化的消息。RequestMessage<T>:用于请求特定类型响应的消息。AsyncRequestMessage<T>:异步版本的RequestMessage<T>。CollectionRequestMessage<T>:用于集合操作的请求消息。AsyncCollectionRequestMessage<T>:异步版本的CollectionRequestMessage<T>。ValueChangedMessage<T>:用于值变化的消息。
CommunityToolkit.Mvvm是一个现代、快速和模块化的MVVM库,它提供了尽可能大的灵活性,让开发人员可以自由选择要使用的组件,以最符合需求的方式组合这些生成块。
相关文章:
WPF中MVVM工具包 CommunityToolkit.Mvvm
CommunityToolkit.Mvvm,也称为MVVM工具包,是Microsoft Community Toolkit的一部分。它是一个轻量级但功能强大的MVVM(Model-View-ViewModel)库,旨在帮助开发者更容易地实现MVVM设计模式。 特点 独立于平台和运行时&a…...
学习空闲任务函数
一、user_StopEnterTask 停止 进入任务 /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_MPUCheckTask.h"#include "ui.h" #include "ui_Hom…...
Hyper-v中ubuntu与windows文件共享
Hyper-v中ubuntu与windows文件共享 前言相关链接第一步--第一个链接第二步--第二个链接测试与验证 前言 关于Hyper-V的共享我搞了好久,网上的很多教程太过冗余,我直接采用最简单的办法吧 相关链接 Hyper-V中Ubuntu 同windows系统共享文件夹-百度经验 …...
【软件工程】一篇入门UML建模图(类图)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...
Windows 安装Docker For Desktop概要
Windows 安装docker 下载部分的工作需要使用科学技术。如果没有可以联系博主发送已下载好的文件。 本文档不涉及技术的讲解,仅有安装的步骤。 准备工作 包含下载与环境准备,下载的文件仅下载,在后续步骤进行安装。 微软关于wsl的文档&…...
解决循环依赖报错问题
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘asyncTaskServiceImpl’: Bean with name ‘asyncTaskServiceImpl’ has been injected into other beans [resignServiceImpl] in its raw version as part…...
代码随想录第46期 单调栈
这道题主要是单调栈的简单应用 class Solution { public:vector<int> dailyTemperatures(vector<int>& T) {vector<int> result(T.size(),0);stack<int> st;st.push(0);for(int i1;i<T.size();i){if(T[i]<T[st.top()]){st.push(i);}else{wh…...
中仕公考怎么样?事业编面试不去有影响吗?
事业编考试笔试已经通过,但是面试不去参加会有影响吗? 1. 自动放弃面试资格:未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题:面试作为招聘流程的关键步骤,无故缺席可能被解释为诚信…...
OMV7 树莓派 tf卡安装
升级7之后,问题多多,不是docker不行了,就是代理不好使 今天又重装了一遍,用官方的链接,重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置࿰…...
Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin
作为一个真正能用的企业级应用,怎么能缺少RESTful接口呢?所以我们需要尝试在Go语言环境中写出我们的对外接口,这样前端就可以借由Gin框架访问我们数据库中的数据了。 一、Gin框架的使用 1. 安装 Gin 首先,你需要在你的 Go 项目…...
【汇编】c++游戏开发
由一起学编程创作的‘C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~’: C/C项目实战:2D射击游戏开发(简易版), 440 行源码分享来啦~_射击c-CSDN博客文章浏览…...
Android Studio | 修改镜像地址为阿里云镜像地址,启动App
在项目文件的目录下的 settings.gradle.kts 中修改配置,配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…...
Rocky linux8 安装php8.0
Rocky linux8 安装php8.0 1.安装remi源2.列出php版本3.变更php版本,Rocky8有提供php8版本,所以切换Rocky8提供的版本,而不是remi提供的版本,不过remi有提供php8.1和php8.2版本。4.切换成remi提供的8.0版本5.安装phpendl 1.安装rem…...
Ubuntu 18 EDK2 环境编译
视频:在全新的Ubuntu上从零搭建UEFI的EDK2开发环境 开始:git clone https://github.com/tianocore/edk2.git 开始编译BaseTools前先更新一下子模块:git submodule update --init ,然后:make -C BaseTools/ 问题1&a…...
C语言项⽬实践-贪吃蛇
目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…...
智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁
近日,贵州省贵阳市中级人民法院对余华英拐卖儿童案做出了一审宣判,判处其死刑,剥夺政治权利终身,并处没收个人全部财产。这一判决不仅彰显了法律的威严,也再次唤起了社会对拐卖儿童犯罪的深切关注。 余华英自1993年至2…...
Spring:IoC/DI加载properties文件
Spring框架可以通过Spring的配置文件完成两个数据源druid和C3P0的配置(Spring:IOC/DI配置管理第三方bean),但是其中包含了一些问题,我们来分析下: 这两个数据源中都使用到了一些固定的常量如数据库连接四要素…...
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…...
深挖C++赋值
详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结: int a 10 是指在内存中(栈)中创建一个int (4 byte)大小的空间…...
【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载
软件介绍 下载iOS旧版应用,简化繁琐的抓包流程。 一键生成去更新IPA(手机安装后,去除App Store的更新检测)。 软件界面 支持系统 Windows 10/Windows 8/Windows 7(由于使用了Fiddler库,因此需要.Net环境…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
