2016-08-09 1 views
0

Lorsqu'un élément a sa propriété Command liée à un ICommand, son état activé peut s'appuyer sur ICommand.CanExecute. Ce que je voudrais faire est de créer une interface, héritant de ICommand, qui fournit un "MayExecute" pour faire la même chose pour la visibilité du contrôle. Existe-t-il un moyen propre de le faire sans vraiment recompiler .NET?Peut-on étendre le comportement ICommand de WPF pour les contrôles?

Répondre

1

Je chercherais à le faire avec une propriété attachée. Je pense que c'est faisable (et plutôt cool).

La propriété attachée aurait une méthode pour vérifier si la valeur de Command sur le contrôle cible implémente IVanishingCommand ou quoi que vous l'appeliez. Si c'est le cas, il s'abonne à MayExecuteChanged et remplace la visibilité du contrôle, le cas échéant.

Vous appelez cette méthode à nouveau lorsque Command obtient une nouvelle valeur (et assurez-vous de vous désabonner de l'ancien événement Command).

Utilisez la réflexion pour obtenir la propriété de dépendance Command du contrôle; Button et MenuItem, par exemple, n'héritent pas tous les deux Command de n'importe quelle classe de base commune.

Vous pourriez être en mesure de le faire avec un déclencheur dans un style aussi - mais il serait bientôt horrible de le faire dans tous ces styles différents.