example commandmanager c# mvvm command

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 :

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:

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