Compartir a través de


RelayCommand y RelayCommand<T>

RelayCommand y RelayCommand<T> son implementaciones de ICommand que pueden exponer un método o un delegado a la vista. Estos tipos actúan como una manera de enlazar comandos entre el modelo de vista y los elementos de la interfaz de usuario.

API de la plataforma: RelayCommand, RelayCommand<T>, IRelayCommand, IRelayCommand<T>

Cómo funcionan

RelayCommand y RelayCommand<T> tienen las siguientes características principales:

  • Proporcionan una implementación base de la interfaz ICommand.
  • También implementan la interfaz IRelayCommand (y IRelayCommand<T>), que expone un método NotifyCanExecuteChanged para generar el evento CanExecuteChanged.
  • Exponen constructores que toman delegados como Action y Func<T>, lo que permite ajustar métodos estándar y expresiones lambda.

Uso de ICommand

A continuación se muestra cómo configurar un comando sencillo:

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

Y la interfaz de usuario relativa podría ser la siguiente (con XAML de 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>

El objeto Button enlaza a ICommand en el modelo de vista, que ajusta el método IncrementCounter privado. El objeto TextBlock muestra el valor de la propiedad Counter y se actualiza cada vez que cambia el valor de la propiedad.

Ejemplos

  • Consulte la aplicación de ejemplo (para varios marcos de interfaz de usuario) para ver el kit de herramientas de MVVM en acción.
  • También puede encontrar más ejemplos en las pruebas unitarias.