Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
ICommandinterface. - Também implementam a interface
IRelayCommand(eIRelayCommand<T>), que expõe um métodoNotifyCanExecuteChangedpara disparar o eventoCanExecuteChanged. - Expõem construtores que aceitam delegados como
ActioneFunc<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.