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
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.