CommunityToolkit.Mvvm框架
CommunityToolkit.Mvvm(简称 MVVM 工具包)是微软官方维护的一个轻量级、高性能的 MVVM 框架,属于 .NET Community Toolkit 的一部分,主要用于简化基于 MVVM 模式的应用程序开发。它适用于各种 .NET 平台(如 WPF、UWP、WinUI、MAUI、Xamarin 等),提供了一系列基础类型和特性,帮助开发者快速实现数据绑定、命令绑定、属性通知等核心 MVVM 功能。
核心特性与组件
ObservableObject
实现
INotifyPropertyChanged接口的基类,用于支持属性变更通知(数据绑定的基础)。通过SetProperty方法自动触发属性变更事件,简化代码:public class UserViewModel : ObservableObject {private string _name;public string Name{get => _name;set => SetProperty(ref _name, value); // 自动通知UI更新} }ObservableRecipient
继承自
ObservableObject,并支持IMessenger消息订阅(见下文),适合需要接收消息的视图模型。RelayCommand/RelayCommand<T>
实现
ICommand接口的命令类,用于将 UI 事件(如按钮点击)绑定到视图模型的方法,支持参数和可执行状态判断:public class MyViewModel : ObservableObject {public ICommand SubmitCommand { get; } public MyViewModel(){SubmitCommand = new RelayCommand(Submit, CanSubmit);} private void Submit(){// 执行提交逻辑} private bool CanSubmit(){return !string.IsNullOrEmpty(Name); // 条件判断} }AsyncRelayCommand/AsyncRelayCommand<T>
用于异步命令的实现,自动处理异步操作的状态(如禁用按钮直到操作完成):
public ICommand LoadDataCommand { get; } public MyViewModel() {LoadDataCommand = new AsyncRelayCommand(LoadDataAsync); } private async Task LoadDataAsync() {// 异步加载数据await Task.Delay(1000); }IMessenger 与消息传递
轻量级的消息机制,用于解耦不同组件(如视图模型之间、视图与视图模型之间)的通信。支持发送 / 接收消息、泛型消息、弱引用订阅等:
// 定义消息类型 public class UserUpdatedMessage : ValueChangedMessage<User> {public UserUpdatedMessage(User user) : base(user) { } } // 发送消息(ViewModel A) messenger.Send(new UserUpdatedMessage(currentUser)); // 接收消息(ViewModel B,需继承 ObservableRecipient 或手动订阅) public class OtherViewModel : ObservableRecipient, IRecipient<UserUpdatedMessage> {public void Receive(UserUpdatedMessage message){var updatedUser = message.Value;// 处理消息} }属性验证(ObservableValidator)
继承自
ObservableObject并实现INotifyDataErrorInfo,支持数据验证(如通过[Required]、[MaxLength]等特性):public class LoginViewModel : ObservableValidator {private string _username; [Required(ErrorMessage = "用户名不能为空")]public string Username{get => _username;set => SetProperty(ref _username, value, this); // 触发验证} }依赖注入支持
与 .NET 内置的依赖注入(DI)框架兼容,可通过构造函数注入服务,便于测试和松耦合。
优势
轻量简洁:无冗余功能,专注于 MVVM 核心需求,学习成本低。
跨平台:支持 .NET 5+ 及各种 UI 框架(WPF、MAUI、WinUI 等)。
高性能:内部优化了属性通知和命令执行的性能,避免不必要的刷新。
官方维护:微软团队持续更新,兼容性和稳定性有保障。
与 C# 特性结合:支持记录类型(record)、属性初始化器等现代 C# 语法。
使用步骤
安装 NuGet 包
在项目中安装
CommunityToolkit.Mvvm包(最新版本通常兼容 .NET 6+):Install-Package CommunityToolkit.Mvvm
创建视图模型
继承
ObservableObject或其他基类,定义属性和命令。绑定到视图
在 XAML 中通过数据绑定关联视图模型的属性和命令:
<!-- WPF 示例 --> <TextBox Text="{Binding Name}" /> <Button Command="{Binding SubmitCommand}" Content="提交" />配置消息传递(可选)
注册
IMessenger实例(如使用WeakReferenceMessenger),实现组件通信。
适用场景
所有基于 MVVM 模式的 .NET 应用程序开发。
需要简化属性通知、命令绑定、组件通信的场景。
追求轻量、高性能且跨平台的项目。
相比传统的 MVVM 框架(如 Prism),CommunityToolkit.Mvvm 更注重简洁性和易用性,适合快速开发中小型项目,也可作为大型项目的基础框架。
