commandmanager - c# relaycommand
Diferencia entre Delegatecommand, relaycommand y routedcommand (1)
Su clase FindProductCommand
implementa la interfaz ICommand
, lo que significa que puede usarse como un comando WPF . No es un DelegateCommand
ni un RelayCommand
, ni un RoutedCommand
, que son otras implementaciones de la interfaz ICommand
.
FindProductCommand
vs DelegateCommand
/ RelayCommand
Generalmente, cuando una implementación de ICommand
se denomina DelegateCommand
o RelayCommand
, la intención es que no tenga que escribir una clase que implemente la interfaz ICommand
; más bien, pasa los métodos necesarios como parámetros al constructor DelegateCommand
/ RelayCommand
.
Por ejemplo, en lugar de toda tu clase, podrías escribir:
ProductViewModel _avm;
var FindPoductCommand = new DelegateCommand<object>(
(parameter) => _avm.FindProduct(),
(parameter) => _avm.CanFindProduct()
);
Algunas implementaciones de DelegateCommand
/ RelayCommand
:
- msdn.microsoft.com/en-us/library/ff654132.aspx
- Implementación de WPF Tutorial de
ICommand
llamadaDelegateCommand
- Otra implementación también llamada
DelegateCommand
- La implementación original de
RelayCommand
por Josh Smith
Relacionado:
- Relay / ICommand vs DelegateCommand - Diferencias
FindProductCommand
versus RoutedCommand
Su FindProductCommand
ejecutará FindProduct
cuando se FindProduct
.
El RoutedCommand
incorporado de RoutedCommand
hace algo más: genera un evento enrutado que puede ser manejado por otros objetos en el árbol visual. Esto significa que puede adjuntar un comando vinculante a esos otros objetos para ejecutar FindProduct
, mientras conecta el RoutedCommand
específicamente a uno o más objetos que activan el comando, por ejemplo, un botón, un elemento de menú o un elemento de menú contextual.
Algunas respuestas SO relacionadas:
- Comando enrutado y relevador MVVM
- WPF ICommand versus RoutedCommand
Estoy confundido sobre el patrón de comando. Hay tantas explicaciones diferentes sobre los comandos. Pensé que el código a continuación era delegatecommand, pero después de leer sobre el comando relay, estoy en duda.
¿Cuál es la diferencia entre relaycommand, delegatecommand y routedcommand? ¿Es posible mostrar en ejemplos que tengan relevancia para mi código publicado?
class FindProductCommand : ICommand
{
ProductViewModel _avm;
public FindProductCommand(ProductViewModel avm)
{
_avm = avm;
}
public bool CanExecute(object parameter)
{
return _avm.CanFindProduct();
}
public void Execute(object parameter)
{
_avm.FindProduct();
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}