TOC

This article has been localized into French by the community.

Commandes:

Introduction aux commandes WPF

Dans un précédent article de ce tutoriel, nous avons vu comment gérer les événements, par exemple quand l'utilisateur clique sur un bouton ou un élément de menu. Dans une interface graphique moderne, il est cependant courant qu'une fonction soit accessible depuis plusieurs endroits, selon différentes actions de l'utilisateur.

Par exemple, si vous avez une interface typique avec un menu principal et une série de barres d'outils, une action comme "Nouveau" ou "Ouvrir" pourrait être accessible dans le menu, dans une barre d'outils, dans un menu contextuel (par exemple quand on fait un clic droit dans la zone principale de l'application) et depuis un raccourci clavier comme Ctrl+N et Ctrl+O.

Chacune de ces actions doit réaliser ce qui se trouve être exactement le même bout de code. Du coup dans une application WinForms, vous devriez définir un événement pour chacune d'elles et ensuite appeler une fonction commune. Avec l'exemple ci-dessus, cela impliquerait au minimum trois handlers d'événement et quelques lignes de code pour gérer le raccourci clavier. Ce n'est pas une solution idéale.

Les commandes

Avec WPF, Microsoft tente de palier à ce problème avec un concept appelé les commandes. Cela vous permet de définir des actions à un seul endroit et ensuite d'y faire référence depuis tous vos contrôles d'interface utilisateur tels que des éléments de menu, des boutons de barres d'outils, etc. WPF va aussi être à l'écoute des raccourcis clavier et va les transmettre à la commande correspondante, s'il y en a une, devenant ainsi un moyen idéal de proposer des raccourcis clavier dans une application.

Les commandes solutionnent également un autre problème de gestion de réentrance dans la même fonction. Dans une application WinForms, vous devriez rédiger du code pour désactiver les éléments de l'interface lorsqu'une action n'est pas disponible. Par exemple, si votre application peut utiliser une commande du Presse-papier telle que Couper mais uniquement lorsqu'un texte est sélectionné, vous devriez activer ou désactiver manuellement l'item du menu principal, le bouton de la barre d'outils et l'item du menu contextuel à chaque changement de la sélection.

Tout ceci est centralisé par les commandes WPF. Avec une seule et même méthode vous décidez si une commande peut-être exécutée ou non, et WPF activera ou désactivera automatiquement tous les éléments de l'interface abonnés à la commande. Cela rend beaucoup plus facile de créer une application réactive et dynamique !

Liens de Command

Les commandes ne font en fait rien par elles-mêmes. A la base, elles consistent en une interface ICommand, qui définie seulement un événement et deux méthodes : Execute() et CanExecute. La première réalise effectivement l'action quand la seconde détermine si cette action est disponible. Pour exécuter l'action associée à la commande vous avez besoin d'un lien entre cette commande et votre code et c'est là que le CommandBinding entre en jeu.

Un CommandBinding est en général défini dans une Window ou un UserControl et contient d'une part la référence à la commande dont il dépend ainsi que les eventHandlers associés aux événements Execute() et CanExecute() de la commande.

Les commandes pré-définies

Vous pouvez évidemment implémenter vos propres commandes, ce que nous verrons dans un prochain chapitre, mais pour vous faciliter la tâche l'équipe WPF a défini plus de 100 commandes, les plus communément employées, que vous pouvez utiliser directement. Elles sont réparties en 5 catégories nommé ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands et ComponentCommands. ApplicationCommands en particulier contient les commandes pour un un grand nombre d'actions fréquemment utilisées telles que Nouveau, Ouvrir, Sauvegarder, Couper, Copier et Coller.

Résumé

Les commandes vous aident à répondre à une action commune depuis différentes sources, en utilisant un seul et unique eventHandler. Elle simplifient également grandement l'activation et la désactivation des éléments de l'interface utilisateur en se basant sur la disponibilité et l'état de la commande. Tout ceci est pour le moment très théorique. Nous verrons dans les prochains chapitres comment les commandes sont utilisées et comment définir vos propres commandes.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!