Skip to content

xsegno/uizado

Repository files navigation

Uizādo

⚠️ Not Ready for Production - This framework is currently in active development and not yet ready for production use. APIs may change without notice.

A lightweight .NET wizard framework enabling multi-step user interactions with clean separation of concerns, proper navigation, and extensibility for UI frameworks like WPF, MAUI, and Blazor.

🎯 Features

  • Lightweight & Fast - Minimal dependencies and optimized performance
  • UI Framework Agnostic - Core logic works across WPF, MAUI, Blazor, and more
  • Clean Architecture - Proper separation between Model, ViewModel, and View
  • Fluent API - Intuitive wizard building with method chaining
  • Async-First - Built for modern async/await patterns
  • Type-Safe - Strongly-typed step models with compile-time safety
  • Extensible - Plugin architecture for custom validation and navigation

🚀 Quick Start

1. Install Package

# Not yet available on NuGet - build from source
dotnet add package Uizado.Core
dotnet add package Uizado.Wpf  # For WPF projects

2. Define Your Step Models

public class BasicInfoModel
{
    public string FirstName { get; set; } = "";
    public string LastName { get; set; } = "";
    public string Email { get; set; } = "";
    public int Age { get; set; }
}

3. Create Wizard Steps

public class BasicInfoStep : IWizardStep<BasicInfoModel>
{
    public string Title => "Basic Information";
    public BasicInfoModel Model { get; private set; } = new();

    public async Task OnEnterAsync(WizardContext context)
    {
        // Initialize step - create views, bind data
        Model = context.GetModel<BasicInfoModel>() ?? new BasicInfoModel();
    }

    public Task<bool> ValidateAsync(WizardContext context)
    {
        // Validate user input
        bool isValid = !string.IsNullOrEmpty(Model.FirstName) && 
                       !string.IsNullOrEmpty(Model.Email);
        
        if (isValid)
            context.SetModel(Model);
            
        return Task.FromResult(isValid);
    }

    public async Task OnExitAsync(WizardContext context)
    {
        // Cleanup step resources
    }
}

4. Build and Run Wizard

// Create wizard with fluent API
var wizard = new WizardBuilder()
    .AddStep<BasicInfoStep>()
    .AddStep<SummaryStep>()
    .Build();

// For WPF applications
var wizardWindow = new WizardWindow(wizard);
wizardWindow.Title = "User Onboarding";
var result = await wizardWindow.ShowWizardAsync();

if (result == true)
{
    // Wizard completed successfully
    var userData = wizard.Context.GetModel<BasicInfoModel>();
}

📁 Project Structure

📁 Uizado/
├── 📁 source/
│   ├── 📦 Uizado.Core/           # Core framework (platform-agnostic)
│   └── 📦 Uizado.Wpf/            # WPF renderer and components
├── 📁 examples/
│   └── 📦 Uizado.Wpf.SimpleOnboarding/  # Working example
└── 📁 tests/                     # Unit tests (planned)

🎨 Supported UI Frameworks

Framework Status Package
WPF ✅ Working Uizado.Wpf
MAUI 🚧 thinking about Uizado.Maui
Blazor 🚧 Planned Uizado.Blazor

🔧 Architecture

Uizādo follows clean architecture principles:

  • IWizardStep<T> - Step interface with lifecycle methods
  • WizardContext - Shared state container across steps
  • WizardBuilder - Fluent API for wizard configuration
  • Wizard - Core orchestrator managing navigation and lifecycle
  • UI Renderers - Platform-specific implementations (WPF, MAUI, etc.)

📖 Core Concepts

Step Lifecycle

  1. OnEnterAsync() - Initialize step, create views, bind data
  2. ValidateAsync() - Validate user input before navigation
  3. OnExitAsync() - Cleanup resources, finalize step

Data Flow

  • Models are stored in WizardContext and persist across steps
  • Navigation is handled by the core Wizard class
  • UI updates are managed by platform-specific renderers

🚧 Development Status

  • ✅ Core framework architecture
  • ✅ WPF renderer with MVVM support
  • ✅ Working example application
  • ✅ Basic validation and navigation
  • 🚧 Unit test coverage
  • 🚧 Documentation and examples
  • 🚧 NuGet packaging
  • 🚧 Additional UI framework support

🤝 Contributing

TBD

📄 License

MIT License - see LICENSE file for details

Remarks

Inspired by the need for a modern, lightweight wizard framework for .NET applications that works across multiple UI platforms and the need to start learning about new topic

About

TBD

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors