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
ICommandllamadaDelegateCommand - Otra implementación también llamada
DelegateCommand - La implementación original de
RelayCommandpor 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; }
}
}