From rkit
WPF MVVM 아키텍처 가이드. CommunityToolkit.Mvvm, DI, 네비게이션 패턴. Triggers: WPF, MVVM, ViewModel, CommunityToolkit, ObservableObject, RelayCommand
npx claudepluginhub solitasroh/rkit --plugin rkitThis skill is limited to using the following tools:
```xml
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.*" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.*" />
</ItemGroup>
</Project>
public partial class MainViewModel : ObservableObject
{
[ObservableProperty] // Generates public 'Name' property
private string _name = "";
[ObservableProperty]
private int _count;
[RelayCommand] // Generates 'IncrementCommand' ICommand
private void Increment() => Count++;
[RelayCommand]
private async Task LoadDataAsync()
{
Name = await _dataService.GetNameAsync();
}
private readonly IDataService _dataService;
public MainViewModel(IDataService dataService) => _dataService = dataService;
}
public partial class App : Application
{
private readonly IServiceProvider _services;
public App()
{
_services = new ServiceCollection()
.AddSingleton<MainViewModel>()
.AddSingleton<IDataService, DataService>()
.BuildServiceProvider();
}
protected override void OnStartup(StartupEventArgs e)
{
var vm = _services.GetRequiredService<MainViewModel>();
new MainWindow { DataContext = vm }.Show();
}
}
<Window DataContext="{Binding}">
<StackPanel>
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding Count}" />
<Button Content="Increment" Command="{Binding IncrementCommand}" />
</StackPanel>
</Window>
{x:Bind} (UWP/WinUI only)