N’avez-vous jamais été confronté à cette problématique ? Si vous développez des applications qui mettent en application le pattern MVVM, impossible de pouvoir y échapper à un moment ou un autre. Pour résoudre cette problématique, nous avons souvent recours à des outils comme le Messenger du framework MVVM Light Toolkit ou encore le ServiceProvider permettant d’enregistrer des services et de les appeler depuis vos ViewModels.
Cependant, si on y réfléchit on pourrait se demander ce que fait ce genre de code dans le ViewModel. N’est-il déjà pas trop lié à des interactions écrans qui ne devraient pas être gérées par les ViewModels, mais par les écrans eux-mêmes. Après tout pourquoi pas garder la logique d’interaction des écrans du côté des vues et de laisser les ViewModels uniquement traiter des données.
Le problème dans cette approche, c’est qu’il est souvent nécessaire de devoir écrire du code dans la partie « code-behind » et pour beaucoup de puriste cela n’est pas acceptable. Cependant, en y regardant d’un peu plus près, il n’est pas rare de trouver dans des projets des ViewModels très (trop) complexe, car en plus de traiter des données, ils ont aussi la charge de gérer une partie des interactions écrans. Gardons en tête que nos ViewModels doivent être découplés un maximum des vues mais également testable facilement.
Je ne vous écrit pas tout cela aujourd’hui avec des certitudes, mais plutôt avec des interrogations. Et c’est dans cet esprit que je vous propose une solution simple pour palier à la problématique d’affichage d’une boite de confirmation avant l’exécution d’une commande d’un ViewModel. La solution exposée ci-dessous a été réalisée pour WPF, mais pourra facilement être utilisé pour Silverlight.
Ma problématique a donc été de déclencher l’ouverture d’une boîte de dialogue de confirmation avant d’effectuer un traitement dans mon ViewModel, mais sans que cette interaction soit codée dans le ViewModel, mais plutôt du côté de la vue.
Afin de trouver une solution simple et réutilisable, je me suis tout simplement aidé d’un Converter qui va convertir une ICommand en une autre commande et dont l’exécution sera précédée de l’affichage d’une MessageBox.
Lire la suite sur le Blog de Sébastien =>
| Suivant > |
|---|





