Вы должны изменить вызов Unregister, чтобы передать объект получателя, а не тип сообщения:
Messenger.Default.Unregister<DialogResponse>(this);
Если вы посмотрите на MVVM Light code для мессенджера, все действия отмены регистрации используют получателя - поскольку внутренне получатель используется для определения, какие обработчики сообщений будут удалены. Самый базовый метод - Unregister(recipient)
, который отменяет регистрацию всех действий для данного получателя. Все дополнительные параметры допускают более мелкозернистый подход.
Если у вас есть несколько действий, обрабатывающих один и тот же тип сообщения, и вы хотите отменить регистрацию только одного из них, вы можете использовать
Messenger.Unregister<DialogMessage>(recipient, action);
чтобы удалить только одно из действий.
Редактировать
Примечания к выпуску MVVM Light для V. 4 указывают на следующие изменения в Messenger:
- Недостающие методы при добавлении в. Интерфейс IMessenger.
- Добавлен дополнительный метод отмены регистрации, позволяющий использовать токены для фильтрации.
- Метод Messenger.CleanupList стал потокобезопасным.