2011-08-02 2 views
1

Y at-il un problème avec le désenregistrement MvvM-Light v3?Est-ce que mvvm light v3 désinscrit fonctionne correctement?

Je suis inscris comme ceci:

Messenger.Default.Register<DialogResponse>(this, 
              MessageTypesUI.YesNoQueryResponse, 
              AnswerResponse); 

Puis, dans « AnswerResponse »

Messenger.Default.Unregister<DialogResponse>(MessageTypesUI.YesNoQueryResponse); 

Les deux méthodes execute et AnswerResponse est appelée, mais la deuxième fois qu'il est appelé deux fois et la troisième fois trois fois, etc.

Il agit comme si mon "Unregister" était ignoré.

Je l'ai essayé à la fois avec Désenregistrer() et ancienne plaine Désenregistrer()

Il y avait quelque chose dans les notes de version V4 qui me fait soupçonner un problème avec la version 3 désinscription ...

Répondre

6

Vous devrait modifier l'appel à Unregister pour passer dans l'objet destinataire, pas le type de message:

Messenger.Default.Unregister<DialogResponse>(this); 

Si vous regardez le MVVM Light code pour le messager toutes les actions désenregistrement utilisent le destinataire - en interne le destinataire est utilisé pour ident ifying quels gestionnaires de message seront supprimés. La méthode la plus élémentaire est Unregister(recipient), qui désenregistre toutes les actions pour un destinataire donné. Tous les paramètres supplémentaires permettent une approche plus fine.

Si vous avez plusieurs actions manipulant le même type de message et que vous voulez désenregistrer seul d'entre eux, vous pouvez utiliser

Messenger.Unregister<DialogMessage>(recipient, action); 

seulement supprimer l'une des actions.

Modifier

Le MVVM version légère note de V. 4 indiquent les modifications suivantes au Messager:

  1. méthodes manquantes ou ajoutées à. L'interface IMessenger.
  2. Une méthode Unregister supplémentaire permettant d'utiliser des jetons pour le filtrage a été ajoutée.
  3. La méthode Messenger.CleanupList a été rendue sûre pour les threads.
+0

Merci beaucoup! Cela m'est venu au milieu de la nuit: comment Messenger saurait-il qui je suis? Mais j'apprécie beaucoup la confirmation. Aurait dû regarder de plus près l'IntelliSense. (duh) –

+2

Encore ce serait bien d'accepter la réponse ... :-) – AxelEckenberger

+1

@Obalix, oui, c'est la bonne réponse, que OP ait pensé ou non lui-même. –