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(this, OnMessageReceived);
        }
    
        private void OnMessageReceived(object recipient, DataMessage message)
        {
            // 处理消息
        }
    }
    

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

    Install-Package CommunityToolkit.Mvvm
    

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

    
      9.0
    
    

四、实战示例:用户登录界面
// 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)

    
    
    

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

    Ioc.Default.ConfigureServices(services => 
        services.AddSingleton());
    

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

    ObservableValidator.EnableDebugExceptions = true;
    

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

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

你可能感兴趣的:(c#,wpf,开发语言)