Pregunta

¿Puedo usar CanExecuteChanged para cambiar el "puede ejecutar" condición?

O de lo contrario ... "por lo que" su usado?

¿Fue útil?

Solución

No se no se puede utilizar para cambiar el estado puede ejecutar. Es un evento y los objetos que participan en el patrón ICommand puede elegir escuchar a este evento, por ejemplo, un botón puede utilizar este evento para saber cuándo hay que volver a consultar los comandos de estado (mediante una llamada al método se puede ejecutar) para establecer su estado habilitado.

Para que el patrón puede ejecutar para ser útil no tiene que ser algo que se puede utilizar para generar el evento. DelegateCommand del prisma tiene un método que se puede llamar para elevar manualmente este evento para suscriptores volver a consultar el método puede ejecutar si han optado por el patrón.

  • Comando de Asignación de botón.
  • suscribe Botón de evento puede ejecutar cambiado.
  • botón de ejecución puede ejecutar método y devuelve falso -. Desactiva el botón
  • cambia de estado que puede ejecutar método depende.
  • Usted llama aumento puede ejecutar cambiado en el comando Prisma.
  • evento se puede ejecutar cambiado es elevado.
  • evento de botón de controlador de incendios.
  • Botón de comando de llamadas puede ejecutar el método -. Botón está habilitado

Ejemplo

En el siguiente ejemplo basado Prisma que cambie el estado de SaveCommand CanExecute de falso a verdadero, mientras que el comando Guardar se está ejecutando. El toRaiseCanExecuteChanged llamada hará que el evento CanExecuteChanged a ser elevada, y los clientes para llamar al método CanExecute. En la práctica esto haría un botón Guardar que fue obligado a SaveCommand cambiar su estado de activado a desactivado y activado de nuevo a nuevo.

public class BlingViewModel
{
    private DelegateCommand<object> _saveCommand;
    private bool _canSaveExecute = true;

    public ICommand SaveCommand
    {
        get
        {
            if (_saveCommand == null)
            {
                _saveCommand = new DelegateCommand<object>
                    (
                    executeMethod: _ => Save()
                    ,
                    canExecuteMethod: _ => _canSaveExecute
                    );
            }
            return _saveCommand;
        }
    }

    private void Save()
    {
        _canSaveExecute = false;
        _saveCommand.RaiseCanExecuteChanged();

        Console.WriteLine("Saving...");

        _canSaveExecute = true;
        _saveCommand.RaiseCanExecuteChanged();
    }
}

Otros consejos

O simplemente System.Windows.Input.CommandManager.InvalidateRequerySuggested() llamada para que sus manipuladores CanExecute son re-evaluado.

public override event EventHandler CanExecuteChanged
{    
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

No sé lo que son las implicaciones de rendimiento de este; sin embargo, no parecen ser demasiado grande, de cualquier manera. Esto es lo que yo uso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top