Comando de Retransmissão e Comando de<Retransmissão T>

Os RelayCommand e RelayCommand<T> são implementações de ICommand que podem expor um método ou um delegado para a vista. Estes tipos funcionam como uma forma de vincular comandos entre o viewmodel e os elementos da interface.

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

Como funcionam

RelayCommand e RelayCommand<T> têm as seguintes características principais:

  • Fornecem uma implementação base da ICommand interface.
  • Também implementam a interface IRelayCommand (e IRelayCommand<T>), que expõe um método NotifyCanExecuteChanged para disparar o evento CanExecuteChanged.
  • Expõem construtores que aceitam delegados como Action e Func<T>, permitindo o encapsulamento de métodos normais 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 relativa poderia então ser (usando o 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 está ligado ao ICommand no viewmodel, que encapsula o método privado IncrementCounter. O TextBlock apresenta o valor da propriedade Counter e é atualizado sempre que o valor da propriedade muda.

Exemplos

  • Dá uma vista de olhos à aplicação de exemplo (para múltiplos frameworks de interface) para veres o MVVM Toolkit em ação.
  • Também podes encontrar mais exemplos nos testes unitários.