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

WPF CommunityToolkit.Mvvm

CommunityToolkit.Mvvm 介绍及使用指南

一、框架介绍

CommunityToolkit.Mvvm(原名 Microsoft.Toolkit.Mvvm)是一个轻量级、高性能的 MVVM(Model-View-ViewModel)框架,专为 .NET 应用设计。其核心优势包括:

  • 零依赖:不引入额外第三方库
  • 跨平台:支持 WPF、UWP、Xamarin、.NET MAUI 等
  • 源码生成:通过编译时代码生成提升性能
  • 现代化语法:深度集成 C# 9/10 特性(如记录类型、init-only 属性)
二、核心组件
  1. ObservableObject
    实现 INotifyPropertyChanged 接口的基类,简化属性通知:

    public class UserModel : ObservableObject
    {private string _name;public string Name{get => _name;set => SetProperty(ref _name, value);}
    }
    

  2. RelayCommand
    封装命令逻辑,支持异步操作:

    public class MainViewModel
    {public IRelayCommand SubmitCommand { get; }public MainViewModel(){SubmitCommand = new RelayCommand(ExecuteSubmit);}private void ExecuteSubmit() => Debug.WriteLine("Command executed!");
    }
    

  3. ObservableRecipientWPW
    扩展 ObservableObject,提供消息总线功能:

    public class MessageReceiver : ObservableRecipient
    {protected override void OnActivated(){Messenger.Register<DataMessage>(this, OnMessageReceived);}private void OnMessageReceived(object recipient, DataMessage message){// 处理消息}
    }
    

三、安装与配置
  1. NuGet 安装
    在项目中使用包管理器安装:

    Install-Package CommunityToolkit.Mvvm
    

  2. 启用源码生成
    .csproj 文件中添加:

    <PropertyGroup><LangVersion>9.0</LangVersion>
    </PropertyGroup>
    

四、实战示例:用户登录界面
// ViewModel
public partial class LoginViewModel : ObservableValidator
{[ObservableProperty][Required(ErrorMessage = "用户名不能为空")]private string _username;[ObservableProperty][Required(ErrorMessage = "密码不能为空")]private string _password;[RelayCommand]private async Task LoginAsync(){ValidateAllProperties();if (HasErrors) return;await AuthService.Authenticate(Username, Password);}
}// View (XAML)
<StackPanel><TextBox Text="{Binding Username, Mode=TwoWay}"/><TextBlock Text="{Binding Errors[Username][0]}"/><Button Command="{Binding LoginCommand}" Content="登录"/>
</StackPanel>

五、高级特性
  1. 依赖注入集成
    使用 Ioc 服务定位器:

    Ioc.Default.ConfigureServices(services => services.AddSingleton<IAuthService, AuthService>());
    

  2. 调试辅助
    启用 MVVM 诊断工具:

    ObservableValidator.EnableDebugExceptions = true;
    

六、最佳实践
  • 对高频更新属性使用 [NotifyPropertyChangedFor] 优化性能
  • 异步命令优先使用 AsyncRelayCommand
  • 对只读集合使用 ObservableCollection<T> + ReadOnlyObservableCollection<T>

该框架显著减少样板代码量(平均减少 75%),官方基准测试显示属性通知性能比传统实现快 3 倍。适合从中小型应用到企业级解决方案的开发场景。

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

相关文章:

  • JavaEE初阶第四期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(二)
  • Unity_导航操作(鼠标控制人物移动)_运动动画
  • (C++)标准模板库(STL)相关介绍(C++教程)
  • 【轨物洞见】光伏清洁机器人本地组网探析——面向沙漠/海上电站的可靠通信架构设计
  • SAP-ABAP:MODIFY语句灵活更新数据库表详解
  • 使用 Bank Churn 数据集进行二元分类
  • 字节跳动开源了一款 Deep Research 项目
  • react生命周期及hooks等效实现
  • Windows 创建并激活 Python 虚拟环境venv
  • 华为云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践
  • 解决Fedora21下无法使用NWJS网页透明效果的问题
  • OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
  • 学习threejs,使用kokomi、gsap实现图片环效果
  • 独家战略!谷子科技“芯”技术联姻浙江卫视
  • 跟着Carl学算法--哈希表
  • Kafka如何保证消息可靠?
  • 构建你的 AI 模块宇宙:Spring AI MCP Server 深度定制指南
  • 哈希表理论与算法总结
  • TCP/UDP协议深度解析(一):UDP特性与TCP确认应答以及重传机制
  • Leaking GAN
  • Netty内存池核心PoolArena源码解析
  • 搭建智能问答系统,有哪些解决方案,比如使用Dify,LangChain4j+RAG等
  • 《C++初阶之类和对象》【初始化列表 + 自定义类型转换 + static成员】
  • Python光学玻璃库opticalglass
  • IP证书在网络安全中的作用
  • Windows驱动开发最新教程笔记2025(一)名词解释
  • Label Studio安装和使用
  • ABP VNext + BFF(Backend for Frontend)模式:Angular/React 专用聚合层
  • 总结设置缓存的时机
  • 七天学会SpringCloud分布式微服务——01