30 lines
1.6 KiB
Markdown
30 lines
1.6 KiB
Markdown
---
|
|
name: avalonia-viewmodels-zafiro
|
|
description: Optimal ViewModel and Wizard creation patterns for Avalonia using Zafiro and ReactiveUI.
|
|
---
|
|
|
|
# Avalonia ViewModels with Zafiro
|
|
|
|
This skill provides a set of best practices and patterns for creating ViewModels, Wizards, and managing navigation in Avalonia applications, leveraging the power of **ReactiveUI** and the **Zafiro** toolkit.
|
|
|
|
## Core Principles
|
|
|
|
1. **Functional-Reactive Approach**: Use ReactiveUI (`ReactiveObject`, `WhenAnyValue`, etc.) to handle state and logic.
|
|
2. **Enhanced Commands**: Utilize `IEnhancedCommand` for better command management, including progress reporting and name/text attributes.
|
|
3. **Wizard Pattern**: Implement complex flows using `SlimWizard` and `WizardBuilder` for a declarative and maintainable approach.
|
|
4. **Automatic Section Discovery**: Use the `[Section]` attribute to register and discover UI sections automatically.
|
|
5. **Clean Composition**: map ViewModels to Views using `DataTypeViewLocator` and manage dependencies in the `CompositionRoot`.
|
|
|
|
## Guides
|
|
|
|
- [ViewModels & Commands](viewmodels.md): Creating robust ViewModels and handling commands.
|
|
- [Wizards & Flows](wizards.md): Building multi-step wizards with `SlimWizard`.
|
|
- [Navigation & Sections](navigation_sections.md): Managing navigation and section-based UIs.
|
|
- [Composition & Mapping](composition.md): Best practices for View-ViewModel wiring and DI.
|
|
|
|
## Example Reference
|
|
|
|
For real-world implementations, refer to the **Angor** project:
|
|
- `CreateProjectFlowV2.cs`: Excellent example of complex Wizard building.
|
|
- `HomeViewModel.cs`: Simple section ViewModel using functional-reactive commands.
|