MvvmLight messenger, как удалить старую привязку [дубликат]

Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.

Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.

3
задан Nate 13 September 2010 в 16:57
поделиться

5 ответов

Убедитесь, что вы отменили регистрацию обработчиков сообщений, когда они вам больше не нужны. Посланник сохраняет ссылку на зарегистрированные методы, и это мешает им собирать мусор.

Поэтому для ViewModels: убедитесь, что вы вызвали очистку после того, как вы сделали (или реализуете IDisposable и вызывают очистку оттуда).

Для представлений (элементов управления, Windows или аналогичных) вызовите Messenger.Unregister в случае, которое возникает при разрыве представления, например выгруженное событие.

Это известное поведение MVVM и обсуждалось в нескольких местах.

8
ответ дан Benjamin 25 August 2018 в 23:02
поделиться

Я видел этот вопрос раньше. Это связано с тем, что Messenger.Default.Register вызывается не один раз. Класс MVVMLight Messenger будет регистрировать один и тот же элемент «x» количество раз. Вот почему, когда вы вызываете «Отправить», вы получаете его много раз.

Кто-нибудь знает, как предотвратить MVVMLight от регистрации несколько раз?

1
ответ дан dnndeveloper 25 August 2018 в 23:02
поделиться

действительно старый, но думал, что я отвечу на всякий случай, если кому-то это понадобится. В то время я был довольно необычен для Silverlight, и проблема закончилась тем, что была утечка памяти, поскольку viewModel, который имел несколько экземпляров, все еще находился в памяти.

1
ответ дан Jason 25 August 2018 в 23:02
поделиться

Очень старый вопрос, но я решил проблему, выполнив это:

static bool isRegistered = false;

, а затем в конструкторе:

if( !isRegistered )
{
   Messenger.Default.Register<MyMessage>(this, OnMessageReceived);
   isRegisterd = true;
}
5
ответ дан jcgalveza 25 August 2018 в 23:02
поделиться

Как отмечали другие участники, одно и то же сообщение регистрируется несколько раз. Я заметил, что это поведение происходит при навигации к View X, а затем переводит обратно в View Z, где сообщение зарегистрировано в конструкторе Z ViewModel. Одним из решений является установка свойства NavigationCacheMode в Required

<Page
  ........
  ........
  NavigationCacheMode="Required">
0
ответ дан usefulBee 25 August 2018 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: