当前位置: 首页 > news >正文

CommunityToolkit.Mvvm框架

CommunityToolkit.Mvvm(简称 MVVM 工具包)是微软官方维护的一个轻量级、高性能的 MVVM 框架,属于 .NET Community Toolkit 的一部分,主要用于简化基于 MVVM 模式的应用程序开发。它适用于各种 .NET 平台(如 WPF、UWP、WinUI、MAUI、Xamarin 等),提供了一系列基础类型和特性,帮助开发者快速实现数据绑定、命令绑定、属性通知等核心 MVVM 功能。

核心特性与组件

  1. ObservableObject

    实现 INotifyPropertyChanged 接口的基类,用于支持属性变更通知(数据绑定的基础)。通过 SetProperty 方法自动触发属性变更事件,简化代码:

    public class UserViewModel : ObservableObject
    {private string _name;public string Name{get => _name;set => SetProperty(ref _name, value); // 自动通知UI更新}
    }
  2. ObservableRecipient

    继承自 ObservableObject,并支持 IMessenger 消息订阅(见下文),适合需要接收消息的视图模型。

  3. RelayCommand/RelayCommand<T>

    实现 ICommand 接口的命令类,用于将 UI 事件(如按钮点击)绑定到视图模型的方法,支持参数和可执行状态判断:

    public class MyViewModel : ObservableObject
    {public ICommand SubmitCommand { get; }
    ​public MyViewModel(){SubmitCommand = new RelayCommand(Submit, CanSubmit);}
    ​private void Submit(){// 执行提交逻辑}
    ​private bool CanSubmit(){return !string.IsNullOrEmpty(Name); // 条件判断}
    }
  4. AsyncRelayCommand/AsyncRelayCommand<T>

    用于异步命令的实现,自动处理异步操作的状态(如禁用按钮直到操作完成):

    public ICommand LoadDataCommand { get; }
    ​
    public MyViewModel()
    {LoadDataCommand = new AsyncRelayCommand(LoadDataAsync);
    }
    ​
    private async Task LoadDataAsync()
    {// 异步加载数据await Task.Delay(1000);
    }
  5. IMessenger 与消息传递

    轻量级的消息机制,用于解耦不同组件(如视图模型之间、视图与视图模型之间)的通信。支持发送 / 接收消息、泛型消息、弱引用订阅等:

    // 定义消息类型
    public class UserUpdatedMessage : ValueChangedMessage<User>
    {public UserUpdatedMessage(User user) : base(user) { }
    }
    ​
    // 发送消息(ViewModel A)
    messenger.Send(new UserUpdatedMessage(currentUser));
    ​
    // 接收消息(ViewModel B,需继承 ObservableRecipient 或手动订阅)
    public class OtherViewModel : ObservableRecipient, IRecipient<UserUpdatedMessage>
    {public void Receive(UserUpdatedMessage message){var updatedUser = message.Value;// 处理消息}
    }
  6. 属性验证(ObservableValidator)

    继承自 ObservableObject 并实现 INotifyDataErrorInfo,支持数据验证(如通过 [Required][MaxLength] 等特性):

    public class LoginViewModel : ObservableValidator
    {private string _username;
    ​[Required(ErrorMessage = "用户名不能为空")]public string Username{get => _username;set => SetProperty(ref _username, value, this); // 触发验证}
    }
  7. 依赖注入支持

    与 .NET 内置的依赖注入(DI)框架兼容,可通过构造函数注入服务,便于测试和松耦合。

优势

  • 轻量简洁:无冗余功能,专注于 MVVM 核心需求,学习成本低。

  • 跨平台:支持 .NET 5+ 及各种 UI 框架(WPF、MAUI、WinUI 等)。

  • 高性能:内部优化了属性通知和命令执行的性能,避免不必要的刷新。

  • 官方维护:微软团队持续更新,兼容性和稳定性有保障。

  • 与 C# 特性结合:支持记录类型(record)、属性初始化器等现代 C# 语法。

使用步骤

  1. 安装 NuGet 包

    在项目中安装 CommunityToolkit.Mvvm 包(最新版本通常兼容 .NET 6+):

    Install-Package CommunityToolkit.Mvvm
  2. 创建视图模型

    继承 ObservableObject 或其他基类,定义属性和命令。

  3. 绑定到视图

    在 XAML 中通过数据绑定关联视图模型的属性和命令:

    <!-- WPF 示例 -->
    <TextBox Text="{Binding Name}" />
    <Button Command="{Binding SubmitCommand}" Content="提交" />
  4. 配置消息传递(可选)

    注册 IMessenger 实例(如使用 WeakReferenceMessenger),实现组件通信。

适用场景

  • 所有基于 MVVM 模式的 .NET 应用程序开发。

  • 需要简化属性通知、命令绑定、组件通信的场景。

  • 追求轻量、高性能且跨平台的项目。

相比传统的 MVVM 框架(如 Prism),CommunityToolkit.Mvvm 更注重简洁性和易用性,适合快速开发中小型项目,也可作为大型项目的基础框架。

http://www.dtcms.com/a/544450.html

相关文章:

  • 快速创建Word箱单(1/2)
  • 营销型网站建设公司易网拓做网站属于什么费用
  • 马蜂窝网络营销网站建设手机编程工具
  • iOS 抓包实战 从原理到复现、定位与真机取证全流程
  • 宝塔反向代理后就访问不到django服务中间件匹配的图片文件夹中的图片了
  • 【网络核心协议全景解析】IP、TCP、UDP与HTTP(多表格深度对比)
  • GStreamer 和 FFmpeg 两大开源工具简要对比
  • Fastlane 结合 开心上架(Appuploader)命令行实现跨平台上传发布 iOS App 的完整方案
  • Rust 中 WebSocket 支持的实现:从协议到生产级应用
  • LangChain生态介绍与实战
  • 前端基础之《React(5)—webpack简介-集成CSS和SASS支持》
  • 国外手机网站源码邵阳 做网站公司
  • 机器学习(3)---线性算法,决策树,神经网络,支持向量机
  • 网站建设服务费属于什么科目中山 灯饰 骏域网站建设专家
  • 操作系统(9)虚拟内存-内存映射
  • 30. 文件IO (1)
  • 技术深析:衡石 Agentic BI 的架构革命与核心技术突破
  • UVa 12333 Revenge of Fibonacci
  • rank(A+E) >= rank(A)证明
  • 未来之窗昭和仙君(四十三)开发布草管理系统修仙版——东方仙盟筑基期
  • VMware 虚拟机网络故障
  • 河南省建设厅举报网站建网站需要多少资金
  • 网站开发常用的谷歌插件企业首次建设网站的策划流程
  • 计算机3D视觉:Pytorch3d的环境配置与初步使用
  • 国产化转型实战:制造业供应链物流系统从MongoDB至金仓数据库迁移全指南
  • 从零开始学 Rust:环境搭建、基础语法到实战项目全流程
  • S11e Protocol 完整白皮书
  • CUDA:通往大规模并行计算的桥梁
  • AR智能眼镜:变电站巡检误操作的“电子安全员”
  • Rust 中的内存对齐与缓存友好设计:性能优化的隐秘战场