当前位置: 首页 > 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.lqws.cn/news/509977.html

相关文章:

  • 【技术难题】el-table的全局数据排序实现示例,不受分页影响,以及异步请求带来的页面渲染问题
  • 针对基于深度学习的侧信道分析(DLSCA)进行超参数的贝叶斯优化
  • VIVADO导出仿真数据到MATLAB中进行分析
  • python基础(字符串-复习)
  • 关于素数、唯一分解等内容的详细讲解(从属于GESP五级)
  • vscode + Jlink 一键调试stm32 单片机程序(windows系统版)
  • HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
  • I2C设备树参数详解
  • 猿人学js逆向比赛第一届第十三题
  • 多线程的同步
  • docker部署oracle数据库
  • Leetcode+JAVA+回溯1
  • i.MX平台下 Linux + FreeRTOS 协同启动与通讯全解(含Yocto实战与核心机制分析)
  • ​CentOS 7 单用户模式重置 root 密码完整指南
  • 无人机神经网络模块运行与技术难点
  • Dify与代理商奇墨科技为企业定制AI应用开发专属方案,适配多样化业务需求
  • vue-25( Composition API 与现有的 Options API 组件集成)
  • 采用ArcGIS10.8.2 进行插值图绘制
  • DEYOLO 全面复现,将双增强跨模态目标检测网络 DEYOLO 融合到 YOLOFuse 框架
  • C++字符大小
  • P0/P1级重大故障根因分析:技术挑战与无指责复盘文化
  • Leaking GAN
  • 医学数据分析实战:冠心病发病因素可视化
  • git学习资源
  • 轨迹降噪API及算法
  • 应用层协议 HTTP
  • 洛谷P1092 [NOIP 2004 提高组] 虫食算
  • openai-agents实现out_guardrails
  • DataSophon 1.2.1集成Flink 1.20并增加JMX 监控
  • [ruby on rails] ActiveJob中 discard_on,retry_on和 rescue_from的应用