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

View the source on GitHub

Browse the @skills marketplace