Introduction (2.0.1)
Crystal.Avalonia is a lightweight infrastructure layer for Avalonia applications:
- Modules —
IModulefor feature registration - DI — Microsoft.Extensions.DependencyInjection
- View/ViewModel wiring — View-first & ViewModel-first
- AOT — Trimming-friendly
Not an MVVM Framework
No ViewModel base classes, commands, or bindings — use CommunityToolkit.Mvvm, Prism, ReactiveUI, etc.
Binding Modes
View-first — XAML sets ViewModelLocator.AutoWireViewModel="True", ViewModel resolved from DI:
<UserControl ViewModelLocator.AutoWireViewModel="True">
<TextBlock Text="{Binding Greeting}"/>
</UserControl>
ViewModel-first — bind ViewModel to ContentControl, ViewLocator creates View:
<ContentControl Content="{Binding MainViewModel}"/>
Registration
services.AddMvvmTransient<MainView, MainViewModel>(); // ViewModel → DI, View → mapping only
// Shell: CreateShell<MainWindow, MainView>() — not from DI
| Component | Role |
|---|---|
CrystalApplication |
App base with module/DI bootstrap |
CreateShell<TWindow, TView>() |
Shell via new; ViewModel wired by ViewModelLocator |
AddMvvmTransient / AddMvvmSingleton |
ViewModel lifetime + View mapping |
ViewModelLocator |
View-first DataContext injection |
ViewLocator |
ViewModel-first View creation |
Next Steps
- Upgrade Guide — migrate from 2.0.0 or v1.2
- Architecture — how it works internally
- Getting Started
- MVVM Pattern