La interfaz Icommand
- CanExecuteChanged (Evento) : Evento, se invoca cuando se producen cambios que pueden cambiar si se puede ejecutar o no el comando.
- CanExecute(Object) Determinará si el comando se puede ejecutar o no. Si devuelve false, el botón (enlazado) se desactivará en la interfaz.
- Execute(Object) : Ejecuta la lógica del comando.
Cómo implementar un ICommand reutilizable
Si está utilizando el patrón MVVM (modelo-vista-modelo), uno de los mecanismos más utilizados para vincular acciones a la vista son los comandos. Para proporcionar un comando, debe implementar la interfaz. Esto es bastante simple, pero tienes que hacerlo una y otra vez. Esto es engorroso
La idea de este patrón es crear un comando universal, que requiere dos delegados: uno que se llama, cuando se invoca [ICommand.CanExecute(object param)] y otro que evalúa el estado del comando cuando se llama. [ICommand.Execute(object param) ]
Además de esto, necesitamos un método que desencadene el evento [commmand.CanExecuteChanged]n lo que obliga a la interfaz de usuario vuelva a evaluar el metodo CanExecute()
Implementatión simple
' public class DelegateCommand : ICommand { private readonly Predicate<object> _canExecute; private readonly Action<object> _execute; public event EventHandler CanExecuteChanged; public DelegateCommand(Action<object> execute) : this(execute, null) { } public DelegateCommand(Action<object> execute, Predicate<object> canExecute) { _execute = execute; _canExecute = canExecute; } public override bool CanExecute(object parameter) { if (_canExecute == null) { return true; } return _canExecute(parameter); } public override void Execute(object parameter) { _execute(parameter); } public void RaiseCanExecuteChanged() { if( CanExecuteChanged != null ) { CanExecuteChanged(this, EventArgs.Empty); } } } '
Mi clase Personalizada DelegateCommand
Enlace de descarga
- Enlace de descarga del Código VB.Net de un DelegateCommand
- Código Md5 para los paranoicos