Share via


RelayCommand and RelayCommand<T>

RelayCommand, RelayCommand<T> e ICommand são implementações que podem expor um método ou delegado à exibição. Esses tipos atuam como uma maneira de associar comandos entre os elementos viewmodel e de interface do usuário.

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

Como eles funcionam

RelayCommand e RelayCommand<T> têm os seguintes recursos principais:

  • Eles fornecem uma implementação base da interface ICommand.
  • Eles também implementam a interface IRelayCommand (e IRelayCommand<T>), que expõe um método NotifyCanExecuteChanged para gerar o evento CanExecuteChanged.
  • Eles expõem construtores que levam delegados como Action e Func<T>, que permitem o encapsulamento de métodos padrão e expressões lambda.

Trabalhar com ICommand

O seguinte mostra como configurar um comando simples:

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++;
}

E a interface do usuário relativa poderia ser (usando WinUI XAML):

<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>

O Button se associa ao ICommand no viewmodel, que encapsula o método privado IncrementCounter. O TextBlock exibe o valor da propriedade Counter e é atualizado sempre que o valor da propriedade é alterado.

Exemplos

  • Confira o aplicativo de exemplo (para várias estruturas de interface do usuário) para ver o Kit de Ferramentas MVVM em ação.
  • Você também pode encontrar mais exemplos nos testes de unidade.