Question

Puis-je utiliser CanExecuteChanged de changer le "peut exécuter" condition?

Ou bien ... "pour quoi" son utilisé?

Était-ce utile?

La solution

Non, vous ne pouvez pas l'utiliser pour changer l'état d'exécution peut. Il est un événement et des objets qui participent au motif ICommand peut choisir d'écouter cet événement par exemple un bouton peut utiliser cet événement pour savoir quand l'état des commandes re-requête (en appelant la méthode peut exécuter) pour définir son état activé.

Pour que le modèle peut exécuter pour être utile, il doit être quelque chose qui peut être utilisé pour déclencher l'événement. Le DelegateCommand de prisme a une méthode que vous pouvez appeler pour augmenter manuellement cet événement si les abonnés re-requête peut exécuter la méthode s'ils ont opté pour le motif.

  • commande Assigner à un bouton.
  • est abonnée à bouton peut exécuter événement changé.
  • Bouton exécuter peut exécuter la méthode et retourne faux -. Bouton désactive
  • Vous changer d'état qui peut exécuter la méthode dépend.
  • Vous appelez raise peut exécuter sur commande Prism changé.
  • Peut exécuter événement changé est élevé.
  • événement bouton commande de gestionnaire.
  • Bouton appelle commande peut exécuter la méthode -. Bouton est activé

Exemple

Dans l'exemple suivant, nous prisme à base de changer l'état de SaveCommand CanExecute de false à true alors que la commande de sauvegarde est exécutée. Le toRaiseCanExecuteChanged d'appel provoque l'événement CanExecuteChanged à soulever, et les clients à appeler la méthode CanExecute. En pratique, cela ferait un bouton Enregistrer qui a été lié à SaveCommand changer son état de permis aux personnes handicapées et revenir à nouveau activée.

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

Autres conseils

Ou tout simplement System.Windows.Input.CommandManager.InvalidateRequerySuggested() d'appel afin que vos gestionnaires de CanExecute sont réévaluées.

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

Je ne sais pas quelles sont les conséquences sur les performances sont pour cela; cependant, ils ne semblent pas être trop grande, de toute façon. Voilà ce que je l'utilise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top