2009-09-15 7 views
1

L'utilisation de commandes est pratique car WPF désactive automatiquement la source de la commande (généralement un bouton) lorsque la commande ne peut pas être exécutée.Désactivation des contrôles basés sur les liaisons de commande/commande WPF

Évidemment, cette fonctionnalité n'est pas disponible pour les commandes qui ne sont pas une source de commande, par ex. ListBox.

Quelle est la meilleure façon d'activer cette fonctionnalité pour les contrôles de source sans commande. Je pensais à deux solutions:

  • Enroulez le ListBox avec un Button et changer la ControlTemplate du bouton pour qu'il n'y ait pas de chrome.
  • Créer un invisible Button et lier la propriété IsEnabled du ListBox à la propriété IsEnabled du Button
  • Créer un descendant de ListBox qui implémente ICommandSource.

Existe-t-il un moyen plus élégant?

Répondre

4

Vous pouvez créer une propriété bool dans votre code-behind (ou modèle de vue) comme CanSelect ou CanEdit et lier la propriété IsEnabled de votre ListBox à lui. Définissez simplement la valeur de cette nouvelle propriété dans la méthode CanExecute de la commande correspondante.

+0

Merci pour la réponse. D'où vient la méthode CanExecute? –

+0

Je fais référence à la méthode ICommand.CanExecute (http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.canexecute.aspx) utilisée par WPF pour déterminer si la commande peut être exécuté ou non. –

+0

J'ai compris. Alors, qui appelle ICommand.CanExecute. Si la commande est attachée à un bouton, WPF fait le travail (mon point # 2). Sinon, comment cela fonctionnerait-il? –

Questions connexes