MVVM - Utiliser l'event d'un Control WPF dans son ViewModel
Par fabien dieulle le samedi, septembre 12 2009, 22:27 - MVVM - Lien permanent
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:
La méthode qui suit nous permet de faire la réflexion nécessaire :
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: