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
(yIRelayCommand<T>
), que expone un métodoNotifyCanExecuteChanged
para generar el eventoCanExecuteChanged
. - Exponen constructores que toman delegados como
Action
yFunc<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.