web-dev-qa-db-fra.com

Comment puis-je utiliser le RelayCommand dans wpf?

Comment puis-je utiliser le RelayCommand dans wpf?

39
Sauron

La commande de relais n'existe pas dans WPF, c'est juste une classe externe qui a pris de l'importance après avoir été définie dans cet article MSDN . Vous devez l'écrire vous-même si vous souhaitez l'utiliser.

Sinon, vous pouvez utiliser la commande Delegate de la boîte à outils WPF ici qui a un peu de fonctionnalités supplémentaires par rapport au code RelayCommand.


Ah, la question a changé pendant que je tapais cette réponse. En supposant que vous utilisez le RelayCommand tel que défini ci-dessus, vous devez lui fournir un ou deux délégués, un qui renvoie un booléen qui détermine si la commande est dans un état valide à exécuter, et un second qui ne renvoie rien et exécute réellement le commander. Si vous ne fournissez pas de délégué "CanRun", la commande considérera qu'il est toujours dans un état valide. Le code utilisé dans l'article:

RelayCommand _saveCommand;
public ICommand SaveCommand
{
    get
    {
        if (_saveCommand == null)
        {
            _saveCommand = new RelayCommand(param => this.Save(),
                param => this.CanSave );
        }
        return _saveCommand;
    }
}

Déclare un RelayCommand qui appellera la méthode Save () lorsqu'elle est déclenchée et renvoie la propriété CanSave comme test de validité. Lorsque cette commande est liée à un bouton dans WPF, la propriété IsEnabled du bouton correspondra à la propriété CanSave du ViewModel et lorsque le bouton est cliqué (en supposant qu'il est activé) la méthode Save () sera appelée sur le ViewModel.

50
Martin Harris

Comme alternative à la création de wrappers RelayCommand pour toutes vos méthodes, je peux suggérer une bibliothèque et une source gratuites qui vous permettront d'utiliser la liaison {BindTo Save()}. Je l'ai créé pour simplifier mes reliures. Cela rend également la liaison relative beaucoup plus facile. Vous pouvez le trouver ici: http://www.simplygoodcode.com/2012/08/simpler-wpf-binding.html

7
Luis Perez