Comme on le sait le pattern MVVM requiert aucun code behind au niveau des vues. Ce processus proscrit tout abonnement à n'importe quel event d'un element graphique, en l'occurence à un UIElement pour être le plus générique possible. Par contre, le pattern nous permet d'utiliser avec aisance les commandes. Donc on créé un comportement qui possède 2 propriétés de dépendences attachées.

  • Une pour la commande à appeler.
  • Une pour le nom de l'évènement à surveiller.

Dès que l'on affecte une valeur à la propriété servant de surveillance sur l'evenenement qui nous interresse, on s'abonne à celui-ci. Le nom de l'event sous forme de string nous sert de clé d'accès. Lorsque l'evènement est déclenché, on appele la commande que l'on à bindée. La réflexion est employée afin de retrouver le delegate (ou l'event pour être type-safe) appelant et de lancer un delegate anonyme afin d'executer la commande.

Voici les 2 propriétés de dépendance rattachées:

MVVM_BehaviorCommand_DependencyProperties.bmp

La méthode qui suit nous permet de faire la réflexion nécessaire :

MVVM_BehaviorCommand_SinkControlEvent.bmp

Voici la classe qui est appelée grace à la réflexion et qui permet d'étendre l'abonnement de l'event jusqu'au déclenchement de notre commande lors de son Invoke:

MVVM_BehaviorCommand_AnonymousDelegateClass.bmp