2010-11-30 5 views
2

У меня есть PRISM RegionManager с несколькими регионами - областью ленты в верхней части и основной областью содержимого для моего представления под ним - довольно простой.Подписчики событий WPF PRISM не умирают

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

В настоящее время я делаю это с помощью метода RegionManager.Add(), чтобы вручную добавить второй вид. Когда я хочу удалить его, я публикую событие, которое потребляется классом менеджера, который получает текущий активный remove, вызывает Remove() в Диспетчере регионов для него, а затем переходит к исходному виду.

Все это отлично работает, за исключением того, что, когда второе представление остается живым после вызова Remove() и удерживает дескриптор на любых подписках, которые он делал в течение своей жизни! Я пробовал вызов Subscribe явно с ложью для слабых ссылок на события, но по умолчанию это по умолчанию, и это не помогло. Я пробовал оба типа создания представления (открытие и впрыск) и удаление представления с помощью «Удалить и деактивировать». Никто из них не помог. Это реальная проблема, так как когда я хочу создать тот же вид в будущем (новый экземпляр этого представления), я остаюсь с несколькими экземплярами из них, все подписываются на одни и те же события, хотя некоторые из этих экземпляров были удаленный веками назад из Менеджера региона.

Нужно ли вручную отменить подписку на каждое событие, на которое я подписался, в моих представлениях (крайне нежелательно)? Или есть способ, которым я могу распоряжаться элементом управления/отмечать его как деактивированный, чтобы его подписки удалялись?

У меня такое ощущение, что я делаю что-то глупое здесь, но это полностью застопорило меня.

Thanks

ответ

1

Это известная проблема. В коде eventAggregator есть ошибка. Посмотрите на следующий блог и предложил хак преодолеть это http://greenicicleblog.com/2010/04/28/prism-event-aggregator-more-leaky-than-it-seems/

Надеется, что это помогает

+0

Спасибо за головы - просто прочитало этот пост и обнаружило, что ошибка и использовал предложенный обходной путь - в то время как это заставляет PRISM использовать слабую ссылку, к сожалению, я все еще получаю такое же поведение :-( – 2010-11-30 15:42:19

Смежные вопросы