У меня есть PRISM RegionManager с парой регионов - область ленты сверху и область основного контента, на мой взгляд, под ней - довольно базовая.
Приложение начинается с «домашнего» просмотра в основной области содержимого. Когда я нажимаю кнопку на ленте, я добавляю второй вид в область содержимого и перехожу к нему в диспетчере регионов. Когда я нажимаю кнопку в этом представлении, оно должно быть удалено, и должен быть показан исходный вид.
В настоящее время я делаю это, используя метод RegionManager.Add (), чтобы вручную добавить второе представление. Когда я хочу удалить его, я публикую событие, которое используется классом менеджера, который получает текущее активное удаление, вызывает Remove () для него в менеджере регионов, а затем возвращается к исходному виду.
Это все прекрасно работает, за исключением того, что, когда я вызываю Remove (), после того, как я вызываю Remove (), второй вид остается живым и сохраняет дескриптор на все подписки, которые он сделал в течение своей жизни! Я попытался вызвать Subscribe явно со значением false для слабых ссылок на события, но это все равно по умолчанию, и это не помогло. Я пробовал оба типа создания представления (обнаружение и внедрение) и удаление представления с помощью Remove и Deactivate. Никто из них не помог. Это реальная проблема, поскольку, когда я хочу создать такое же представление в будущем (новый экземпляр этого представления), у меня остается несколько экземпляров, все они подписываются на одни и те же события, хотя некоторые из этих экземпляров были удален несколько лет назад из Регионального менеджера.
Нужно ли вручную отписываться от каждого события, на которое я подписываюсь в моих представлениях (крайне нежелательно)? Или есть какой-то способ, которым я могу избавиться от элемента управления / пометить его как деактивированный, чтобы удалить его подписки?
У меня такое чувство, что я делаю здесь что-то глупое, но это меня совершенно озадачило.
Спасибо