Microsoft.Toolkit.Mvvm.Input Namespace

Classes

AsyncRelayCommand

A command that mirrors the functionality of RelayCommand, with the addition of accepting a Func<TResult> returning a Task as the execute action, and providing an ExecutionTask property that notifies changes when ExecuteAsync(Object) is invoked and when the returned Task completes.

AsyncRelayCommand<T>

A generic command that provides a more specific version of AsyncRelayCommand.

ICommandAttribute

An attribute that can be used to automatically generate ICommand properties from declared methods. When this attribute is used to decorate a method, a generator will create a command property with the corresponding IRelayCommand interface depending on the signature of the method. If an invalid method signature is used, the generator will report an error.

In order to use this attribute, the containing type doesn't need to implement any interfaces. The generated properties will be lazily assigned but their value will never change, so there is no need to support property change notifications or other additional functionality.

This attribute can be used as follows:

partial class MyViewModel
{
    [ICommand]
    private void GreetUser(User? user)
    {
        Console.WriteLine($"Hello {user.Name}!");
    }
}

And with this, code analogous to this will be generated:

partial class MyViewModel
{
    private IRelayCommand? greetUserCommand;

    public IRelayCommand GreetUserCommand => greetUserCommand ??= new RelayCommand(GreetUser);
}

The following signatures are supported for annotated methods:

void Method();

Will generate an IRelayCommand property (using a RelayCommand instance).

void Method(T?);

Will generate an IRelayCommand<T> property (using a RelayCommand<T> instance).

Task Method();
Task Method(CancellationToken);

Will both generate an IAsyncRelayCommand property (using an AsyncRelayCommand<T> instance).

Task Method(T?);
Task Method(T?, CancellationToken);

Will both generate an IAsyncRelayCommand<T> property (using an AsyncRelayCommand<T> instance).

RelayCommand

A command whose sole purpose is to relay its functionality to other objects by invoking delegates. The default return value for the CanExecute(Object) method is true. This type does not allow you to accept command parameters in the Execute(Object) and CanExecute(Object) callback methods.

RelayCommand<T>

A generic command whose sole purpose is to relay its functionality to other objects by invoking delegates. The default return value for the CanExecute method is true. This class allows you to accept command parameters in the Execute(T) and CanExecute(T) callback methods.

Interfaces

IAsyncRelayCommand

An interface expanding IRelayCommand to support asynchronous operations.

IAsyncRelayCommand<T>

A generic interface representing a more specific version of IAsyncRelayCommand.

IRelayCommand

An interface expanding ICommand with the ability to raise the CanExecuteChanged event externally.

IRelayCommand<T>

A generic interface representing a more specific version of IRelayCommand.