RelayCommand et RelayCommand<T>

RelayCommand et RelayCommand<T> sont des implémentations ICommand qui peuvent exposer une méthode ou déléguer à l’affichage. Ces types agissent comme un moyen de lier des commandes entre les éléments viewmodel et d’interface utilisateur.

APIs de plateforme:RelayCommand, RelayCommand<T>, IRelayCommand, IRelayCommand<T>

Fonctionnement

Les types RelayCommand et RelayCommand<T> incluent les principales fonctionnalités suivantes :

  • Ils fournissent une implémentation de base de l’interface ICommand.
  • Ils implémentent également l’interface IRelayCommand (et IRelayCommand<T>), qui expose une méthode NotifyCanExecuteChanged pour déclencher l’événement CanExecuteChanged.
  • Ils exposent des constructeurs prenant des délégués tels que Action et Func<T>, ce qui permet l’habillage de méthodes standard et d’expressions lambda.

Utilisation de ICommand

Voici comment configurer une commande simple :

public class MyViewModel : ObservableObject
{
    public MyViewModel()
    {
        IncrementCounterCommand = new RelayCommand(IncrementCounter);
    }

    private int counter;

    public int Counter
    {
        get => counter;
        private set => SetProperty(ref counter, value);
    }

    public ICommand IncrementCounterCommand { get; }

    private void IncrementCounter() => Counter++;
}

Et l’interface utilisateur relative peut ensuite être (à l’aide de XAML WinUI) :

<Page
    x:Class="MyApp.Views.MyPage"
    xmlns:viewModels="using:MyApp.ViewModels">
    <Page.DataContext>
        <viewModels:MyViewModel x:Name="ViewModel"/>
    </Page.DataContext>

    <StackPanel Spacing="8">
        <TextBlock Text="{x:Bind ViewModel.Counter, Mode=OneWay}"/>
        <Button
            Content="Click me!"
            Command="{x:Bind ViewModel.IncrementCounterCommand}"/>
    </StackPanel>
</Page>

Button lie au ICommand dans le viewmodel, qui encapsule la méthode IncrementCounter privée. TextBlock affiche la valeur de la propriété Counter et est mis à jour chaque fois que la valeur de la propriété change.

Exemples

  • Consultez l’exemple d’application (pour plusieurs infrastructures d’interface utilisateur) pour voir le kit d’outils MVVM à l’œuvre.
  • Vous trouverez également d’autres exemples dans les tests unitaires.