Прежде всего, английский не является моим родным языком, поэтому я прошу прощения за ошибки.
Я столкнулся с проблемой в программе Messenger MVVM Light Messenger.Кажется, он срабатывает несколько раз, даже если я отменил регистрацию.В SO много сообщений об этом, но, похоже, ничто не решает мою проблему.
Все мои viewModel являются Singleton, созданными ViewModelLocator
, и только ViewModels
использует Messenger.
Я использую метод регистрации с токеном viewModelName
и ProcessMessage
для обработки сообщения.Каждый ViewModel
регистрируется одинаково в конструкторе и имеет разные имена:
Messenger.Default.Register<SimpleMessage>(this, ViewModelName, ProcessMessage);
SimpleMessage - это простой класс с объектом и перечислением.
Когда я отправляю сообщениеЯ всегда использую токен, например:
Messenger.Default.Send(message, ViewModelNameEnum.Home);
Сообщение получено получателем, но после 2 или 3 полученных сообщений оно запускается несколько раз, и количество раз увеличивается для каждого полученного сообщения..
Я пытался уничтожить и воссоздать ViewModel после использования, но безуспешно.Сообщение будет получено несколько раз после 2 или 3 вызова метода sendMessage.Я также попробовал это, но опять же, это не работает должным образом:
public static void UnRegisterViewModel<T>(T instance) where T : ViewModelTemplate
{
Messenger.Default.Unregister<SimpleMessage>(instance, instance.ViewModelName);
instance.Cleanup();
SimpleIoc.Default.Unregister<T>();
SimpleIoc.Default.Register<T>(true);
}
Я видел, что в классе Messenger.Default есть закрытое поле "_recipientStrictAction", в котором хранятся получатели.Действительно, в списке несколько раз один и тот же токен, если он срабатывает несколько раз.
Есть ли кто-нибудь, кто может объяснить мне, что я сделал неправильно?