Стратегия отмены подписчиков на обработчики событий - PullRequest
0 голосов
/ 23 марта 2010

В моем приложении WPF у меня есть View, которому присваивается ViewModel, и когда ему присваивается это View, он добавляет обработчики событий в событие PropertyChanged ViewModel. Когда в GUI происходит какое-то действие, я удаляю View и добавляю другой View в контейнер удержания - где этот новый привязан к той же ViewModel.

После того, как это произошло, старый View продолжает обрабатывать события PropertyChanged во ViewModel. Я предполагаю, что это происходит из-за того, что Сборщик мусора еще не просмотрел Представление и, следовательно, жив? Ну, мне нужно это остановить. Я предполагаю, что мне нужно вручную отсоединить обработчик событий от ViewModel? Есть ли лучшая практика, как справиться с этим?

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

Возможно, подписка на событие Unloaded представления и отключение в обработчике события Unloaded немного чище, и пользователям также не потребуется вызывать Dispose ().

2 голосов
/ 23 марта 2010

Стратегия, которую я использую, состоит в том, чтобы сделать реализацию Viewis IDisposable и иметь функцию Dispose в View, чтобы отписаться от обработчиков событий. Тогда тот, кто отвечает за добавление представления, должен сначала вызвать Dispose() в старом представлении.

Работает как шарм, но действительно ли это использование IDisposable?

...