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 属性)
二、核心组件
-
ObservableObject
实现INotifyPropertyChanged
接口的基类,简化属性通知:public class UserModel : ObservableObject {private string _name;public string Name{get => _name;set => SetProperty(ref _name, value);} }
-
RelayCommand
封装命令逻辑,支持异步操作:public class MainViewModel {public IRelayCommand SubmitCommand { get; }public MainViewModel(){SubmitCommand = new RelayCommand(ExecuteSubmit);}private void ExecuteSubmit() => Debug.WriteLine("Command executed!"); }
-
ObservableRecipientWPW
扩展ObservableObject
,提供消息总线功能:public class MessageReceiver : ObservableRecipient {protected override void OnActivated(){Messenger.Register<DataMessage>(this, OnMessageReceived);}private void OnMessageReceived(object recipient, DataMessage message){// 处理消息} }
三、安装与配置
-
NuGet 安装
在项目中使用包管理器安装:Install-Package CommunityToolkit.Mvvm
-
启用源码生成
在.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>
五、高级特性
-
依赖注入集成
使用Ioc
服务定位器:Ioc.Default.ConfigureServices(services => services.AddSingleton<IAuthService, AuthService>());
-
调试辅助
启用 MVVM 诊断工具:ObservableValidator.EnableDebugExceptions = true;
六、最佳实践
- 对高频更新属性使用
[NotifyPropertyChangedFor]
优化性能 - 异步命令优先使用
AsyncRelayCommand
- 对只读集合使用
ObservableCollection<T>
+ReadOnlyObservableCollection<T>
该框架显著减少样板代码量(平均减少 75%),官方基准测试显示属性通知性能比传统实现快 3 倍。适合从中小型应用到企业级解决方案的开发场景。