MVVM LIGHT - сообщение получено несколько раз - PullRequest
1 голос
/ 19 сентября 2019

Прежде всего, английский не является моим родным языком, поэтому я прошу прощения за ошибки.

Я столкнулся с проблемой в программе 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", в котором хранятся получатели.Действительно, в списке несколько раз один и тот же токен, если он срабатывает несколько раз.

Есть ли кто-нибудь, кто может объяснить мне, что я сделал неправильно?

...