Agent skill · software engineering · github
mvvm-toolkit
CommunityToolkit.Mvvm (the MVVM Toolkit) core: source generators ([ObservableProperty], [RelayCommand], [NotifyPropertyChangedFor], [NotifyCanExecuteChangedFor], [NotifyDataErrorInfo]), base classes (ObservableObject / ObservableValidator / ObservableRecipient), commands (RelayCommand / AsyncRelayCommand), and validation. Companion skills: mvvm-toolkit-messenger for pub/sub, mvvm-toolkit-di for Microsoft.Extensions.DependencyInjection wiring. Works across WPF, WinUI 3, MAUI, Uno, and Avalonia.
Why this skill is useful
Provides specific source generator patterns and commands for MVVM architecture that the AI wouldn't reliably generate on its own.
What it needs
Requires dotnet installed locally. About 4k tokens when loaded. Last updated 2026-08-07. 37,534 stars on the source repository.
What this skill does
CommunityToolkit.Mvvm (core) Use this skill when authoring or reviewing ViewModels, properties, commands, or validation in apps that use CommunityToolkit.Mvvm 8.x. Companion skills. Load mvvm-toolkit-messenger for IMessenger pub/sub patterns. Load mvvm-toolkit-di for Microsoft.Extensions.DependencyInjection integration. Quick recap. [ObservableProperty] on private fields in partial classes; [RelayCommand] on instance methods; inherit from ObservableObject (or ObservableValidator for input forms, ObservableRecipient when using IMessenger). --- Package & setup Targets: netstandard2.0, netstandard2.1, net6.0+. Works on .NET, .NET Framework, Mono. Source generators ship in the same NuGet — no extra analyzer reference required. Namespaces: Universal rule. Every type that uses [ObservableProperty] or [RelayCommand] — and every enclosing type, if nested — must be declared partial. Without it, the generators emit MVVMTK0008 / MVVMTK0042. --- Source generators cheat sheet Attribute Applied to Generates ----------- ----------- ----------- [ObservableProperty] private field Public INotifyPropertyChanged property + OnXxxChanging/OnXxxChanged partial-method hooks [NotifyPropertyChangedFor(nameof(Other))] observable field Also raises PropertyChanged for the listed property [NotifyCanExecuteChangedFor(nameof(MyCommand))] observable field Calls MyCommand.NotifyCanExecuteChanged() on change [NotifyDataErrorInfo] observable field on ObservableValidator Calls ValidateProperty(value) from the setter [NotifyPropertyChangedRecipients] observable field on ObservableRecipient Broadcast(old, new) after the change [RelayCommand] instance method Lazy RelayCommand / AsyncRelayCommand exposed as IRelayCommand / IAsyncRelayCommand [RelayCommand(CanExecute = nameof(CanX))] instance method Wires CanExecute to a method or property [RelayCommand(IncludeCancelCommand = true)] async method with CancellationToken Also generates XxxCancelCommand [RelayCommand(AllowConcurrentExecutions = true)] async met …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills github/mvvm-toolkit