Create Your First App
dotnet new CT -o CounterApp
cd CounterApp
ViewModel
public partial class CounterViewModel : ObservableObject
{
[ObservableProperty] private int _count;
public void Increment() => Count++;
public void Decrement() => Count--;
public void Reset() => Count = 0;
}
View
<UserControl ViewModelLocator.AutoWireViewModel="True">
<StackPanel HorizontalAlignment="Center" Spacing="10">
<TextBlock Text="{Binding Count}" FontSize="48"/>
<StackPanel Orientation="Horizontal" Spacing="10">
<Button Content="-" Command="{Binding Decrement}"/>
<Button Content="Reset" Command="{Binding Reset}"/>
<Button Content="+" Command="{Binding Increment}"/>
</StackPanel>
</StackPanel>
</UserControl>
Register
services.AddMvvmTransient<CounterView, CounterViewModel>();
// MainWindow: CreateShell<MainWindow, MainView>() in CreateShell
dotnet run
Further Reading
How it works: Architecture — Bootstrap Pipeline & MVVM Wiring — startup sequence,
ViewModelLocatorauto-binding, and why only ViewModel enters DI.