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等平台上使用。
  • 易于选取和使用:对应用程序结构或编码范例没有严格需求,可以灵活使用。
  • 按需取用:自由选择要使用的组件,所有类型都是松散耦合的。
  • 引用实现:为基类库中包含的接口提供实现,但缺少直接使用它们所需的具体类型。

用法

  1. 安装:在Visual Studio中,通过NuGet包管理器搜索并安装CommunityToolkit.Mvvm包,
  2. 引用:在项目中添加using CommunityToolkit.Mvvm;来使用新API。
  3. 实现MVVM:通过继承ObservableObject来创建ViewModel,利用SetProperty方法实现属性变更通知,以及使用RelayCommandAsyncRelayCommand来实现命令模式。

功能

该库提供了一些基础类和接口的实现,主要包括:

  • ObservableObject 和 ObservableRecipient:这些类实现了INotifyPropertyChanged接口,并提供了SetProperty方法,可以在属性值改变时触发PropertyChanged事件,简化数据绑定。
  • ICommand接口的实现,如RelayCommandAsyncRelayCommand:这些类可以帮助创建命令,命令是MVVM模式中的一个重要组成部分。
  • IMessenger和相关消息传递机制,如WeakReferenceMessengerStrongReferenceMessenger,用于组件间的松散耦合通信。

CommunityToolkit.Mvvm 包含的类型主要分为以下几个部分:

  1. CommunityToolkit.Mvvm.ComponentModel
    • ObservableObject:实现了 INotifyPropertyChanged 接口,用于创建响应属性变化的ViewModel。
    • ObservableRecipient:用于消息传递的基类。
    • ObservableValidator:用于数据验证的基类。
  2. CommunityToolkit.Mvvm.DependencyInjection
    • Ioc:提供依赖注入的容器和相关服务。
  3. CommunityToolkit.Mvvm.Input
    • RelayCommand:一个简单的命令实现,用于执行无参方法。
    • RelayCommand<T>:一个泛型版本的 RelayCommand,用于执行带参方法。
    • AsyncRelayCommand:一个异步命令实现,用于执行异步无参方法。
    • AsyncRelayCommand<T>:一个异步命令实现,用于执行异步带参方法。
    • IRelayCommandRelayCommand 的接口定义。
    • IRelayCommand<T>RelayCommand<T> 的接口定义。
    • IAsyncRelayCommandAsyncRelayCommand 的接口定义。
    • IAsyncRelayCommand<T>AsyncRelayCommand<T> 的接口定义。
  4. CommunityToolkit.Mvvm.Messaging
    • IMessenger:消息传递接口,定义了消息发送和订阅的方法。
    • WeakReferenceMessenger:一个使用弱引用的消息传递类,用于避免内存泄漏。
    • StrongReferenceMessenger:一个使用强引用的消息传递类。
    • IRecipient<TMessage>:消息接收者接口,用于接收特定类型的消息。
    • MessageHandler<TRecipient, TMessage>:消息处理程序,用于处理特定类型的消息。
  5. CommunityToolkit.Mvvm.Messaging.Messages
    • PropertyChangedMessage<T>:用于属性变化的消息。
    • RequestMessage<T>:用于请求特定类型响应的消息。
    • AsyncRequestMessage<T>:异步版本的 RequestMessage<T>
    • CollectionRequestMessage<T>:用于集合操作的请求消息。
    • AsyncCollectionRequestMessage<T>:异步版本的 CollectionRequestMessage<T>
    • ValueChangedMessage<T>:用于值变化的消息。

CommunityToolkit.Mvvm 还提供了一些关键属性和功能

  1. 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);
          }
      }
  2. [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);
      }
  3. [RelayCommand] 属性
    • [RelayCommand] 是一个特性,用于创建命令。命令是 MVVM 模式中的一个重要组成部分,用于将 View 的行为(如按钮点击)绑定到 ViewModel 中的方法。
    • 用法:在 ViewModel 中的方法上使用 [RelayCommand] 特性。
    • 示例代码
      public partial class MyViewModel : ObservableObject
      {
          [RelayCommand]
          private void ExecuteCommand()
          {
              // Command execution logic here
          }
      }
      这将生成一个 ICommand 实现,可以被 View 绑定。
其他属性
  1. RelayCommandAsyncRelayCommand

    • 这些类实现了 ICommand 接口,用于创建命令,是 MVVM 模式中命令模式的实现。
  2. IMessenger

    • 消息传递接口,用于在不同的 ViewModel 或 View 之间传递消息,实现组件间的松散耦合通信。
  3. PropertyChangedMessage<T>

    • 用于属性变化的消息,是 IMessenger 接口实现中用于传递属性变更通知的一种消息类型。
  4. RequestMessage<T>AsyncRequestMessage<T>

    • 用于请求特定类型响应的消息,其中 AsyncRequestMessage<T> 是异步版本的请求消息。
  5. CollectionRequestMessage<T>AsyncCollectionRequestMessage<T>

    • 用于集合操作的请求消息,其中 AsyncCollectionRequestMessage<T> 是异步版本的集合请求消息。
  6. ValueChangedMessage<T>

    • 用于值变化的消息,是 IMessenger 接口实现中用于传递值变更通知的一种消息类型。

CommunityToolkit.Mvvm 的框架类 

  1. CommunityToolkit.Mvvm.ComponentModel
    • ObservableObject:实现了 INotifyPropertyChanged 和 INotifyPropertyChanging 接口,用于创建响应属性变化的 ViewModel。
    • ObservableRecipient:用于消息传递的基类。
    • ObservableValidator:用于数据验证的基类。
  2. CommunityToolkit.Mvvm.DependencyInjection
    • Ioc:提供依赖注入的容器和相关服务。
  3. CommunityToolkit.Mvvm.Input
    • RelayCommand:一个简单的命令实现,用于执行无参方法。
    • RelayCommand<T>:一个泛型版本的 RelayCommand,用于执行带参方法。
    • AsyncRelayCommand:一个异步命令实现,用于执行异步无参方法。
    • AsyncRelayCommand<T>:一个异步命令实现,用于执行异步带参方法。
    • IRelayCommandRelayCommand 的接口定义。
    • IRelayCommand<T>RelayCommand<T> 的接口定义。
    • IAsyncRelayCommandAsyncRelayCommand 的接口定义。
    • IAsyncRelayCommand<T>AsyncRelayCommand<T> 的接口定义。
  4. CommunityToolkit.Mvvm.Messaging
    • IMessenger:消息传递接口,定义了消息发送和订阅的方法。
    • WeakReferenceMessenger:一个使用弱引用的消息传递类,用于避免内存泄漏。
    • StrongReferenceMessenger:一个使用强引用的消息传递类。
    • IRecipient<TMessage>:消息接收者接口,用于接收特定类型的消息。
    • MessageHandler<TRecipient, TMessage>:消息处理程序,用于处理特定类型的消息。
  5. CommunityToolkit.Mvvm.Messaging.Messages
    • PropertyChangedMessage<T>:用于属性变化的消息。
    • RequestMessage<T>:用于请求特定类型响应的消息。
    • AsyncRequestMessage<T>:异步版本的 RequestMessage<T>
    • CollectionRequestMessage<T>:用于集合操作的请求消息。
    • AsyncCollectionRequestMessage<T>:异步版本的 CollectionRequestMessage<T>
    • ValueChangedMessage<T>:用于值变化的消息。

CommunityToolkit.Mvvm是一个现代、快速和模块化的MVVM库,它提供了尽可能大的灵活性,让开发人员可以自由选择要使用的组件,以最符合需求的方式组合这些生成块。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML文件中引入jQuery的库文件

方法一&#xff1a; 1. 首先&#xff0c;在官方网站(https://jquery.com/)上下载最新版本的jQuery库文件&#xff0c;通常是一个名为jquery-x.x.x.min.js的文件。 2. 将下载的jquery-x.x.x.min.js文件保存到你的项目目录中的一个合适的文件夹中&#xff0c;比如将它保存在你的项…

使用Wireshark获取USB HID(Human Interface Device)报告描述符

使用Wireshark选择需要获取的USB进行抓取数据&#xff0c;找到设备&#xff08;host&#xff09;接收信息的数据 第二栏出现hid报告&#xff0c;右击选择复制流 将复制的内容粘贴到USB标准请求及描述符在线分析工具 - USB中文网 进行解析 以图中获取手写板的数据为例&#xff…

ReactPress与WordPress:一场内容管理系统的较量

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress WordPress官网&#xff1a;https://wordpress.org/ ReactPress与WordPress&#xff1a;一场内容管理系统的较量 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为…

DevExpress WinForms中文教程:Data Grid - 如何绑定到实体框架数据源?

在本教程中&#xff0c;您将学习如何将DevExpress WinForms的网格控件绑定到实体框架数据源、如何使用数据注释属性来更改网格显示和管理数据的方式&#xff0c;以及如何将单元格值更改发送回数据源。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&#xff0c;能为Wi…

使用多种机器学习调参模型进行二分类建模的全流程,代做分析辅导

使用多种机器学习调参模型进行二分类建模的全流程教程 机器学习全流程分析各个模块用到的总的参数文件 0. 分析参数文件 参数文件名称&#xff1a;total_analysis_params_demo.xlsx &#xff0c;很多分析模块都是这个总的参数文件&#xff0c;我的这个总的参数文件如果有更新…

材质(一)

描述&#xff1a; 材质蓝图&#xff0c;蓝图可以这么定义&#xff0c;是一种数据结构&#xff0c;是一种带有流水线的模糊的数据结构&#xff0c; 材质蓝图也是一种蓝图。 示例操作:

SCI论文数据可视化的在线网址

目录 SCI论文数据可视化的在线网址 EVenn(Evenn):免费 SCI论文数据可视化的在线网址 数据可视化的在线网址,以下是一些值得推荐的资源: ImageGP(ImageGP | ImageGP):该平台可以在线生成常见的线图、柱状图、散点图、箱线图、集合图、热图和直方图等。用户只需粘贴数…

电子应用产品设计方案-4:基于物联网和人工智能的温度控制器设计方案

一、概述 本温度控制器旨在提供高精度、智能化、远程可控的温度调节解决方案&#xff0c;适用于各种工业和民用场景。 二、系统组成 1. 传感器模块 - 采用高精度的数字式温度传感器&#xff0c;如 TMP117&#xff0c;能够提供精确到 0.01C 的温度测量。 - 配置多个传感器分布在…

5G的发展演进

5G发展的驱动力 什么是5G [远程会议&#xff0c;2020年7月10日] 在来自世界各地的政府主管部门、电信制造及运营企业、研究机构约200多名会议代表和专家们的共同见证下&#xff0c;ITU-R WP 5D#35e远程会议宣布3GPP 5G技术&#xff08;含NB-IoT&#xff09;满足IMT-2020 5G技…

人工智能--自然语言处理简介

上一篇&#xff1a;《人工智能模型训练中的数据之美——探索TFRecord》 序言&#xff1a;自然语言处理&#xff08;NLP&#xff09;是人工智能中的一种技术&#xff0c;专注于理解基于人类语言的内容。它包含了编程技术&#xff0c;用于创建可以理解语言、分类内容&#xff0c…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平莱单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平 导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 如果导航过于普通&#xff0c;无法容纳复杂的信息结构&#xff0c;就需要在…

企望制造ERP系统 drawGrid.action SQL注入致RCE漏洞复现

0x01 产品简介 企望制造ERP系统是一款专为制造企业设计的企业资源计划(ERP)软件,旨在优化企业的资源配置,提高运营效率,并增强企业的竞争力。系统集成了财务管理、生产管理、供应链管理、客户关系管理(CRM)、人力资源管理(HRM)等多个核心功能模块,能够全面覆盖企业的…

基于JDBC的书库系统(MySQL)

一、创建数据库中的表 1、需求 有一张表叫javabook【创建表要求使用sql语句进行】 表中列 bookid 整数自增类型 表中列 bprice 小数类型 表中列 bookname 字符串类型 长度不能小于50 工程和包要求&#xff1a; domain dao …

内置RTK北斗高精度定位的4G执法记录仪、国网供电服务器记录仪

内置RTK北斗高精度定位的4G执法记录仪、国网供电服务器记录仪BD311R 发布时间: 2024-10-23 11:28:42 一、 产品图片&#xff1a; 二、 产品特性&#xff1a; 4G性能&#xff1a;支持2K超高清图传&#xff0c;数据传输不掉帧&#xff0c;更稳定。 独立北…

腾讯音乐2024Q3财报:“稳”是核心,再进一步

11月12日&#xff0c;腾讯音乐娱乐集团&#xff08;以下简称“腾讯音乐”&#xff09;发布了截至2024年9月30日止的第三季度未经审计财务报告&#xff0c;各项核心财务指标均符合市场预期。本季度总收入为70.2亿元&#xff0c;同比增长6.8%&#xff1b;调整后净利润为19.4亿元&…

地宫取宝(摘花生+最长上升子序列)C++

1212. 地宫取宝 - AcWing题库 #include <iostream>using namespace std;const int N 55; const int MOD 1000000007;int w[N][N],f[N][N][13][14]; int n,m,k;int main() {cin >> n >> m >> k;for (int i 1;i < n;i) {for (int j 1;j < m;j)…

2024 年 8 个最佳 API 设计工具图文介绍

8 个最佳 API 设计工具推荐&#xff0c;包括 Apifox、Postman、Swagger、Insomnia、Stoplight、Hoppscotch、RapidAPI和Paw。 详细介绍&#xff1a;2024 年 8 个最佳 API 设计工具推荐

minio 分布式

方案设计 需要5台服务器&#xff0c;一台nginx用作分发请求&#xff0c;4台minio服务器&#xff0c;每个minio服务器上至少2个盘。在这个方法中&#xff0c;我使用了lvm的缓存&#xff0c;在同种固态盘的情况下&#xff0c;可以使读性能提高数倍到十倍&#xff0c;使写性能提高…

kettle开发-Day43-数据对比

前言&#xff1a; 随着数字化的深入&#xff0c;各种系统及烟囱的建立&#xff0c;各系统之间的架构和数据存储方式不同&#xff0c;导致做数据仓库或数据湖时发现&#xff0c;因自建的系统或者非标准化的系统经常存在物理删除而不是软删除。这就延伸出一个问题&#xff0c;经常…

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提&#xff1a; VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息&#xff0c;然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明&#xff1a; 1.保存文件&#xff1a;按 Ctrl O&#xff0c;然后按 Enter 来保存文件。 2.退出编辑器&#xf…