j'utilise mvvm light qui a un bus de message :
https://www.nuget.org/packages/MvvmLight
après avec vous avez la possibilité d'utiliser des messages génériques ou des messages personnalisées.
Personnellement j'évite les messages génériques (j'aime pas la précense de chaînes de caractères) et j'utilise donc une classe.
Exemple :
Code :
- class MessageNotificationUpdateChampsTaille
- {
- public int taille { get ; private set }
- MessageNotificationUpdateChampsTaille(int maTaille)
- {
- this.taille = maTaille;
- }
- }
|
la classe peut être vide mais peut aussi contenir des propriétés (par exemple un champ taille)
du coup dans le VM2 vous faites un :
Code :
- // envoie un message de type MessageNotificationUpdateChampsTaille sur le bus de message avec comme valeur 42
- Messenger.default.send(new MessageNotificationUpdateChampsTaille(42));
|
et dans le VM1 dans le constructeur vous vous enregistrez à ce message :
Code :
- public VM1()
- {
- // on s'abonne au bus de message pour écouter le message de type MessageNotificationUpdateChampsTaille et si il arrive on lance la fonction HandleMessageNotificationUpdateChampsTaille
- Messenger.default.register<MessageNotificationUpdateChampsTaille>(this, HandleMessageNotificationUpdateChampsTaille);
- }
- private void HandleMessageNotificationUpdateChampsTaille(MessageNotificationUpdateChampsTaille monMessage)
- {
- // on fait se qu'on veut ici par exemple afficher un log
- console.log(MessageNotificationUpdateChampsTaille.taille);
- }
|
le code c'est du pseudo-code dans le sens ou je n'ai pas vérifié les majuscules et tout ça (donc pas de copier-coller à la dure) mais le principe est là.
---------------