Я использую MVVM Light и использую сообщения для связи между ViewModels, чтобы позволить ViewModel знать, когда это нормально для выполнения чего-либо. Моя проблема заключается в том, что я регистрируюсь для сообщения, а затем получаю его несколько раз. поэтому, чтобы у меня не было выполнения какой-либо программы, я должен создать булевские флаги, чтобы узнать, уже ли она получена. Любая идея, почему это так и как я могу это остановить?MVVM Light Messenger выполняется несколько раз
ответ
Я видел этот выпуск раньше. Это связано с тем, что Messenger.Default.Register вызывается не один раз. Класс MVVMLight Messenger будет регистрировать один и тот же элемент «x» количество раз. Вот почему, когда вы вызываете «Отправить», вы получаете его много раз.
Кто-нибудь знает, как предотвратить MVVMLight от регистрации несколько раз?
Я нашел для своей проблемы хотя бы потому, что другие модели и взгляды видят в памяти. У меня все еще есть одна проблема, когда мне нужно отправить сообщение из vm в представление. Моя проблема заключается в том, что все предыдущие экземпляры этого представления все еще хранятся в памяти, поэтому сообщение отправляется и получает несколько раз – Jason
Обязательно отмените регистрацию обработчиков сообщений, если они вам больше не понадобятся. Посланник ведет ссылки на зарегистрированные методы, и это мешает им собирать мусор.
Таким образом, для ViewModels: убедитесь, что вы вызвали очистку после того, как сделали (или реализуете IDisposable и вызывают очистку оттуда).
Для просмотра (управления, Windows или аналогичного) вызова Messenger.Unregister в событии, которое происходит при отрыве представления, например. Выгруженное событие.
Это известное поведение MVVM и обсуждалось в нескольких местах.
... за исключением того, что в WPF событие UserControl.Unloaded не гарантируется увольнением в соответствии с http://connect.microsoft.com/VisualStudio/feedback/details/575287/the-usercontrol-unloaded-event-is-not-raised-when-the-mainwindow-gets-closed - так что это не так просто. –
То, что я делаю, заключается в том, что вам нужно очистить почтовый ящик, иначе он будет обрабатывать сообщения, хотя он больше не должен этого делать. Событие Unloaded - одно место, но оно может быть не единственным или лучшим. – AxelEckenberger
Очень старый вопрос, но я решил эту проблему, делая это:
static bool isRegistered = false;
, а затем, в конструкторе:
if(!isRegistered)
{
Messenger.Default.Register<MyMessage>(this, OnMessageReceived);
isRegisterd = true;
}
Это вероятное решение проблемы и не регистрирует Messenger в конструкторе. –
действительно старый, но думал, что я бы ответить только в случае, если кто-то нуждается в этом. В то время я был довольно необычен для Silverlight, и проблема закончилась тем, что была утечка памяти, поскольку viewModel, который имел несколько экземпляров, все еще находился в памяти.
Как упоминалось в других источниках, одно и то же сообщение регистрируется несколько раз. Я заметил, что это поведение происходит при навигации к View X, а затем переводит обратно в View Z, где сообщение зарегистрировано в конструкторе Z ViewModel. Одно из решений заключается в том, чтобы установить свойство NavigationCacheMode Обязательное
<Page
........
........
NavigationCacheMode="Required">
- 1. MVVM Light toolkit + Messenger
- 2. MVVM Light WPF Messenger
- 3. MVVM light toolkit messenger problems
- 4. MVVM-Light: Messenger с TTarget
- 5. MVVM Light Messenger Receive Method
- 6. MvvM Light: Messenger от события
- 7. mvvm-light RaisePropertyChanged messenger не транслируется
- 8. MVVM Light Messenger - отправка и регистрация объектов
- 9. WPF MVVM Light Messenger и Prism EventAggregator
- 10. Проблемы с использованием mvvm light Messenger класс
- 11. В чем преимущество MVVM Light Messenger?
- 12. MVVM light несколько экземпляров usercontrol
- 13. MVVM Light Несколько контекстов данных
- 14. MVVM: Посредник, Messenger
- 15. WPF MVVM Light Navigation
- 16. WPF & MVVM Light - Закрытие определенного дочернего окна через Messenger
- 17. MVVM Light - с помощью ViewModelLocator - свойства ударяются несколько раз
- 18. MVVM Light Messenger и Dynamic Dll Сообщения не получены
- 19. Редактирование записей с MVVM/MVVM-Light
- 20. Как использовать MVVM Light Messenger в Windows Phone?
- 21. Как получить DialogResult с помощью mvvm-light Messenger
- 22. Это правильный способ использования класса MVVM Light Messenger
- 23. Можно ли отправить только токен через MVVM Light Messenger?
- 24. MVVM Light Messenger - Как вы тестируете целевые сообщения?
- 25. Экземпляр по умолчанию (возможно, статический) плагина Messenger, например MVVM Light
- 26. MVVM Light Toolkit - Messenger использует Event Aggregator или Mediator Pattern?
- 27. MVVM light Messenger Действие выполняется после первого раза Windows Uinversal 8.1
- 28. MVVM Light Messeging issue
- 29. MVVM Light - отображается текущий вид?
- 30. MVVM light и ViewModelLocator
Куда отправлено ваше сообщение? Вы перешли через источник MVVM Light, чтобы узнать, почему сообщение отправляется несколько раз? Есть определенная работа, которую вы можете сделать, или более подробную информацию, которую вы можете предоставить, прежде чем на ваш вопрос будет дан ответ. –