SuperAPI AI 工具集

mvvm-toolkit

通用与其它

查看项目

更新于 10-15 21:52

技能介绍

用途:在使用 CommunityToolkit.Mvvm 8.x 的应用中编写或审查 ViewModel、属性、命令与验证逻辑时使用本技能。相关技能:IMessenger 发布订阅见 mvvm-toolkit-messenger,依赖注入集成见 mvvm-toolkit-di。

主要能力:通过源生成器减少样板代码。[ObservableProperty] 加在私有字段上生成公有的 INotifyPropertyChanged 属性及 OnXxxChanging/OnXxxChanged 钩子;[NotifyPropertyChangedFor] 额外触发指定属性的 PropertyChanged;[NotifyCanExecuteChangedFor] 在值变化时调用命令的 NotifyCanExecuteChanged;[NotifyDataErrorInfo] 在 ObservableValidator 上调用 ValidateProperty;[RelayCommand] 加在实例方法上生成 RelayCommand/AsyncRelayCommand,支持 CanExecute、IncludeCancelCommand、AllowConcurrentExecutions、FlowExceptionsToTaskScheduler。[property: SomeAttr] 可前向特性到生成属性。

用法:安装 <PackageReference Include="CommunityToolkit.Mvvm" Version="8.*" />,源生成器随同一 NuGet 提供,无需额外分析器引用。命名空间为 CommunityToolkit.Mvvm.ComponentModel 与 CommunityToolkit.Mvvm.Input。目标框架 netstandard2.0、netstandard2.1、net6.0+,可用于 .NET、.NET Framework、Mono。任何使用这两个特性的类型及其外层嵌套类型都必须声明为 partial,否则报 MVVMTK0008/MVVMTK0042。基类选择:默认 ObservableObject;需要 INotifyDataErrorInfo 用 ObservableValidator;收发 IMessenger 消息用 ObservableRecipient。验证可用 DataAnnotations 与 [NotifyDataErrorInfo],并调用 ValidateAllProperties 等。手动构造 RelayCommand 仅在需要自行管理命令生命周期或从非平凡来源组合时使用。

限制与常见陷阱:字段名不要用 PascalCase,否则与生成属性冲突;[RelayCommand] 仅将返回 Task 的方法包装为 IAsyncRelayCommand,async void 会变成同步命令且异常无法观察;忘记 [NotifyCanExecuteChangedFor] 会导致按钮状态不更新;修改 [ObservableProperty] 字段持有的同一引用不会触发通知,应替换实例。完整诊断表与更多陷阱见 references/troubleshooting.md。