Table of Contents

Introduction (2.0.1)

Crystal.Avalonia is a lightweight infrastructure layer for Avalonia applications:

  • Modules — IModule for 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