Avalonia.Labs.CommandManager 11.2.0

Avalonia.Labs.CommandManager

Experimental WPF-like implementation of RoutedCommand.

the currently supported flow is this:

sequenceDiagram
    participant RotendCommand
    participant View
    participant CommandManager
    participant ViewModel
    participant TopLevel
    TopLevel->>CommandManager: Got Focus
    CommandManager->>RotendCommand: Raise CanExecuteChanged
    RotendCommand->>View: Raise CommandManager.CanExecuteEvent
    View->>CommandManager: Raise CommandManager.CanExecuteEvent
    CommandManager->>ViewModel: ICommand.CanExecute
    CommandManager->>RotendCommand: Handle=True
    RotendCommand->>View: Raise CommandManager.ExecuteEvent
    View->>CommandManager: Raise CommandManager.ExecuteEvent
    CommandManager->>ViewModel: ICommand.Execute

Get Started

  1. Install package

    dotnet add package package Avalonia.Labs.CommandManager
    
  2. Add XML Namespace

    <UserControl xmlns="https://github.com/avaloniaui"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                xmlns:lab="using:Avalonia.Labs.Catalog"
    +             xmlns:rc="using:Avalonia.Labs.Input"
                mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
                xmlns:viewModels="using:Avalonia.Labs.Catalog.ViewModels"
                x:Class="Avalonia.Labs.Catalog.Views.RouteCommandView"
                x:DataType="viewModels:RouteCommandViewModel"
                HorizontalContentAlignment="Stretch"
                VerticalContentAlignment="Stretch"
                >
                ...
    </UserControl>
    
  3. Define your's RouterCommands

    public static class ApplicationCommands
    {
        public readonly static RoutedCommand Open = new RoutedCommand(nameof(Open));
        public readonly static RoutedCommand Save = new RoutedCommand(nameof(Save));
    }
    
  4. Assign your RotedCommand

            <UniformGrid Columns="2"
                        Grid.Column="2">
                <Button Content="Open"
                        Command="{x:Static lab:ApplicationCommands.Open}"
                        CommandParameter="{Binding .}"/>
                <Button Content="Save"
                        Command="{x:Static lab:ApplicationCommands.Save}"
                        CommandParameter="{Binding .}"/>
            </UniformGrid>
    
  5. Binding RouterCommand to yours ViewModel

    <UserControl xmlns="https://github.com/avaloniaui"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                xmlns:lab="using:Avalonia.Labs.Catalog"
                xmlns:rc="using:Avalonia.Labs.Input"
                mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
                xmlns:viewModels="using:Avalonia.Labs.Catalog.ViewModels"
                x:Class="Avalonia.Labs.Catalog.Views.RouteCommandView"
                x:DataType="viewModels:RouteCommandViewModel"
                HorizontalContentAlignment="Stretch"
                VerticalContentAlignment="Stretch"
                >
    <rc:CommandManager.CommandBindings>
        <rc:CommandBinding Command="{x:Static lab:ApplicationCommands.Open}" ExecutingCommand="{Binding Open}" />
        <rc:CommandBinding Command="{x:Static lab:ApplicationCommands.Save}" ExecutingCommand="{Binding Save}" />
    </rc:CommandManager.CommandBindings>
    ...
    </UserControl>
    

You can view full sample here.

Todo

  • CommandTarget (requires modification in Avalonia).

No packages depend on Avalonia.Labs.CommandManager.

.NET 6.0

.NET Standard 2.0

Version Downloads Last updated
12.0.2 4 10/08/2026
12.0.0 3 10/09/2026
12.0.0-rc1 3 10/08/2026
11.3.1 4 10/08/2026
11.3.0 5 10/01/2026
11.2.0 3 10/08/2026
11.1.0 4 10/08/2026
11.0.10.1 4 10/08/2026
11.0.10 4 10/08/2026