Atc.XamlToolkit
1.5.44
See the version list below for details.
dotnet add package Atc.XamlToolkit --version 1.5.44
NuGet\Install-Package Atc.XamlToolkit -Version 1.5.44
<PackageReference Include="Atc.XamlToolkit" Version="1.5.44" />
<PackageVersion Include="Atc.XamlToolkit" Version="1.5.44" />
<PackageReference Include="Atc.XamlToolkit" />
paket add Atc.XamlToolkit --version 1.5.44
#r "nuget: Atc.XamlToolkit, 1.5.44"
#:package Atc.XamlToolkit@1.5.44
#addin nuget:?package=Atc.XamlToolkit&version=1.5.44
#tool nuget:?package=Atc.XamlToolkit&version=1.5.44
ATC.Net Avalonia and WPF
This is a base libraries for building Avalonia or WPF application with the MVVM design pattern.
🎁 Key Features
🏗️ MVVM Foundation
- ViewModelBase - Base class with INotifyPropertyChanged
- MainWindowViewModelBase - Main window lifecycle management
- ViewModelDialogBase - Dialog-specific ViewModels
- ObservableObject - Lightweight observable pattern
⚡ Commands
- RelayCommand /
RelayCommand<T>- Synchronous commands withCanExecutesupport - RelayCommandAsync /
RelayCommandAsync<T>- Async/await commands for responsive UIs - Automatic CanExecute refresh - Commands automatically update UI state
- Error handling support - Built-in
IErrorHandlerinterface for graceful error management
🔔 Messaging System
Decouple your ViewModels with a powerful messaging infrastructure:
- Messenger - Central message bus for app-wide communication
- GenericMessage<T> - Send typed messages between components
- NotificationMessage - Simple notifications with optional callbacks
- PropertyChangedMessage<T> - Broadcast property changes across ViewModels
Perfect for scenarios like:
- Cross-ViewModel communication without direct references
- Event aggregation patterns
- Plugin architectures
- Loosely-coupled component communication
// Send a message
Messenger.Default.Send(new GenericMessage<User>(currentUser));
// Receive a message
Messenger.Default.Register<GenericMessage<User>>(this, msg =>
{
var user = msg.Content;
// Handle the user...
});
Learn more: Messaging System Documentation
🎨 Value Converters
Extensive collection of ready-to-use XAML converters for both WPF and Avalonia:
Bool Converters
BoolToInverseBoolValueConverterBoolToVisibilityCollapsedValueConverterBoolToVisibilityVisibleValueConverterBoolToWidthValueConverterMultiBoolToBoolValueConverter(AND/OR logic)MultiBoolToVisibilityVisibleValueConverter
String Converters
StringNullOrEmptyToBoolValueConverterStringNullOrEmptyToInverseBoolValueConverterStringNullOrEmptyToVisibilityVisibleValueConverterStringNullOrEmptyToVisibilityCollapsedValueConverterToLowerValueConverter/ToUpperValueConverter
See detailed Value Converters documentation
⚙️ Source Generators
Eliminate boilerplate with powerful code generation:
- [ObservableProperty] - Auto-generate properties with change notification
- [RelayCommand] - Auto-generate command properties from methods
- [DependencyProperty] (WPF) - Auto-generate dependency properties
- [AttachedProperty] (WPF) - Auto-generate attached properties
- [RoutedEvent] (WPF) - Auto-generate routed events
Learn more about each generator:
- SourceGenerators for AttachedProperties
- SourceGenerators for DependencyProperties
- SourceGenerators for RoutedEvents
- SourceGenerators for ViewModel
🚀 Performance Optimizations
- BooleanBoxes - Cached boolean boxing for reduced memory allocations
- WeakAction/WeakFunc - Memory-leak prevention for event handlers and callbacks
- PropertyDefaultValueConstants - Shared default values for common property types
🔧 Utilities
- DesignModeHelper - Detect design-time vs runtime for better designer experience
- Base Converter Classes -
ValueConverterBaseandMultiValueConverterBasefor creating custom converters - Error Handling -
IErrorHandlerinterface for centralized command error management
🚀 Quick Start
Installation
Install via NuGet Package Manager or .NET CLI:
For WPF:
dotnet add package Atc.XamlToolkit.Wpf
For Avalonia:
dotnet add package Atc.XamlToolkit.Avalonia
Basic Usage
// Create a ViewModel with source-generated properties and commands
public partial class MainViewModel : ViewModelBase
{
[ObservableProperty]
private string userName;
[ObservableProperty]
private bool isLoading;
[RelayCommand]
private async Task LoadDataAsync()
{
IsLoading = true;
// Load data...
IsLoading = false;
}
}
📖 Read the full Getting Started Guide for a complete walkthrough.
Requirements
NuGet Packages Provided in this Repository
📚 Documentation
Get Started
- Getting Started Guide - Complete walkthrough for beginners
Core Concepts
- MVVM Framework - ViewModels, Commands, and MVVM patterns
- Messaging System - Decoupled communication between components
- Source Generators - Eliminate boilerplate code
Advanced Topics
- Value Converters - Complete converter reference
- Performance Optimizations - BooleanBoxes, WeakAction, and more
- Utilities and Helpers - DesignModeHelper, base classes, and utilities
Platform-Specific (WPF Only)
- Dependency Properties - Auto-generate dependency properties
- Attached Properties - Auto-generate attached properties
- Routed Events - Auto-generate routed events
Source Generator Examples
Example for ViewModel classes with source generation:
For more details, see the MVVM section.
🎯 Complete Feature List
Core MVVM Components
| Component | Description | Package |
|---|---|---|
ViewModelBase |
Base ViewModel with INotifyPropertyChanged | Atc.XamlToolkit |
MainWindowViewModelBase |
Main window lifecycle management | Atc.XamlToolkit.Wpf/Avalonia |
ViewModelDialogBase |
Dialog-specific ViewModels | Atc.XamlToolkit |
ObservableObject |
Lightweight observable pattern | Atc.XamlToolkit |
Commands
| Command | Description | Async Support |
|---|---|---|
RelayCommand |
Synchronous command | No |
RelayCommand<T> |
Synchronous command with parameter | No |
RelayCommandAsync |
Asynchronous command | Yes |
RelayCommandAsync<T> |
Asynchronous command with parameter | Yes |
All commands support:
- ✅
CanExecutewith automatic refresh - ✅ Error handling via
IErrorHandler - ✅ Auto-generation via
[RelayCommand]attribute
Messaging System
| Type | Purpose |
|---|---|
Messenger |
Central message bus |
GenericMessage<T> |
Typed message passing |
NotificationMessage |
String-based notifications |
NotificationMessageAction |
Messages with callbacks |
NotificationMessageAction<T> |
Messages with parameterized callbacks |
PropertyChangedMessage<T> |
Property change broadcasts |
NotificationMessageWithCallback |
Generic callback support |
Source Generators
| Generator | Platform | Description |
|---|---|---|
[ObservableProperty] |
WPF, Avalonia | Auto-generate observable properties |
[RelayCommand] |
WPF, Avalonia | Auto-generate command properties |
[DependencyProperty] |
WPF only | Auto-generate dependency properties |
[AttachedProperty] |
WPF only | Auto-generate attached properties |
[RoutedEvent] |
WPF only | Auto-generate routed events |
Value Converters
Bool Converters (WPF & Avalonia):
BoolToInverseBoolValueConverterBoolToVisibilityCollapsedValueConverterBoolToVisibilityVisibleValueConverterBoolToWidthValueConverterMultiBoolToBoolValueConverterMultiBoolToVisibilityVisibleValueConverter
String Converters (WPF & Avalonia):
StringNullOrEmptyToBoolValueConverterStringNullOrEmptyToInverseBoolValueConverterStringNullOrEmptyToVisibilityVisibleValueConverterStringNullOrEmptyToVisibilityCollapsedValueConverterToLowerValueConverterToUpperValueConverter
Performance Optimizations
| Optimization | Benefit |
|---|---|
BooleanBoxes |
Zero-allocation boolean boxing |
WeakAction |
Memory leak prevention |
WeakFunc<T> |
Memory leak prevention with return values |
PropertyDefaultValueConstants |
Shared default values |
Utilities
| Utility | Purpose |
|---|---|
DesignModeHelper |
Detect design-time vs runtime |
ValueConverterBase |
Base class for custom converters |
MultiValueConverterBase |
Base class for multi-value converters |
IErrorHandler |
Centralized error handling |
🌟 Why Choose Atc.XamlToolkit?
- ✅ Modern - Built for .NET 9 with latest C# features
- ✅ Cross-platform - Supports both WPF and Avalonia
- ✅ High Performance - Optimized for minimal allocations
- ✅ Source Generators - Eliminate boilerplate code
- ✅ Well Documented - Comprehensive documentation and examples
- ✅ Battle Tested - Used in production applications
- ✅ Open Source - MIT licensed and community-driven
How to contribute
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- Atc (>= 2.0.562)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on Atc.XamlToolkit:
| Package | Downloads |
|---|---|
|
Atc.Wpf
A base library for building WPF application with the MVVM design pattern. |
|
|
Atc.Wpf.Controls
A base library for building WPF application. |
|
|
Atc.XamlToolkit.Wpf
Atc.XamlToolkit.Wpf is a library for building WPF applications using the MVVM design pattern. |
|
|
Atc.XamlToolkit.Avalonia
Atc.XamlToolkit.Avalonia is a library for building Avalonia applications using the MVVM design pattern. |
|
|
Atc.XamlToolkit.WinUI
Atc.XamlToolkit.WinUI is a library for building WinUI applications using the MVVM design pattern. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.81 | 187 | 11/3/2025 |
| 1.5.78 | 188 | 11/2/2025 |
| 1.5.77 | 194 | 11/2/2025 |
| 1.5.76 | 144 | 10/31/2025 |
| 1.5.75 | 177 | 10/27/2025 |
| 1.5.74 | 137 | 10/26/2025 |
| 1.5.67 | 162 | 10/24/2025 |
| 1.5.63 | 172 | 10/20/2025 |
| 1.5.62 | 179 | 10/19/2025 |
| 1.5.44 | 207 | 10/5/2025 |
| 1.5.43 | 186 | 10/2/2025 |
| 1.5.42 | 332 | 5/12/2025 |
| 1.5.41 | 246 | 5/11/2025 |
| 1.5.40 | 233 | 5/11/2025 |
| 1.5.39 | 126 | 5/10/2025 |
| 1.5.38 | 117 | 5/9/2025 |
| 1.5.37 | 210 | 5/8/2025 |
| 1.5.36 | 207 | 5/6/2025 |
| 1.5.35 | 177 | 5/6/2025 |
| 1.5.34 | 227 | 5/5/2025 |
| 1.5.33 | 194 | 5/4/2025 |
| 1.5.30 | 209 | 5/4/2025 |
| 1.5.28 | 193 | 4/30/2025 |
| 1.5.26 | 227 | 4/23/2025 |
| 1.5.25 | 198 | 4/23/2025 |
| 1.5.24 | 221 | 4/22/2025 |
| 1.5.23 | 208 | 4/22/2025 |
| 1.5.22 | 204 | 4/22/2025 |
| 1.5.21 | 213 | 4/21/2025 |
| 1.5.20 | 226 | 4/21/2025 |
| 1.5.19 | 210 | 4/21/2025 |
| 1.5.18 | 186 | 4/20/2025 |
| 1.5.16 | 204 | 4/20/2025 |
| 1.5.15 | 230 | 4/10/2025 |
| 1.5.14 | 203 | 4/10/2025 |
| 1.5.12 | 227 | 4/10/2025 |
| 1.5.7 | 233 | 4/5/2025 |
| 1.4.4 | 147 | 4/5/2025 |
| 1.4.0 | 229 | 3/27/2025 |
| 1.3.1 | 207 | 3/26/2025 |
| 1.0.0 | 540 | 3/26/2025 |