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
Install package
dotnet add package package Avalonia.Labs.CommandManager
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>
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)); }
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>
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
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 |