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 倍。适合从中小型应用到企业级解决方案的开发场景。

1万+

被折叠的 条评论
为什么被折叠?



