Avalonia.Labs.CommandManager 11.2.999-cibuild-00052251

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.

https://github.com/AvaloniaUI/Avalonia.Labs/releases

.NET 6.0

.NET Standard 2.0

Version Downloads Last updated
11.2.999-cibuild-00052337 0 10/02/2024
11.2.999-cibuild-00052325 0 10/02/2024
11.2.999-cibuild-00052251 0 09/30/2024
11.2.999-cibuild-00051673 9 09/05/2024
11.2.999-cibuild-00051670 11 09/05/2024
11.1.0 16 08/05/2024
11.0.10.1 40 03/19/2024