WPF PRISM 事件订阅不会消亡

问题描述 投票:0回答:1

我有一个 PRISM RegionManager,其中有几个区域 - 顶部的功能区区域和其下方用于我的视图的主要内容区域 - 相当基本。

应用程序从主要内容区域中的“主页”视图开始。当我单击功能区上的按钮时,我将第二个视图注入内容区域并在区域管理器中导航到它。当我单击此视图上的按钮时,应将其删除并显示原始视图。

我目前正在使用 RegionManager.Add() 方法手动添加第二个视图。当我想要删除它时,我发布一个事件,该事件由管理器类使用,该管理器类获取当前活动的删除,在区域管理器上为其调用Remove(),然后导航回原始视图。

这一切都很好,除了当我调用Remove()后第二个视图保持活动状态时,并保留它在其生命周期内进行的任何订阅的句柄!我尝试过使用 false 显式调用 Subscribe 以获取弱事件引用,但无论如何这是默认设置,并且没有帮助。我尝试过创建视图(发现和注入)以及通过“删除”和“停用”删除视图的两种类型。他们都没有帮忙。这是一个真正的问题,因为当我想在将来创建相同的视图(该视图的新实例)时,我留下了它们的多个实例,所有实例都订阅相同的事件,即使其中一些实例是很久以前就从区域经理中删除了。

我是否需要手动取消订阅我在视图中订阅的每个事件(非常不可取)?或者有什么方法可以处理该控件/将其标记为已停用,以便删除其订阅?

我感觉我在这里做了一些愚蠢的事情,但这让我完全难住了。

谢谢

wpf prism eventaggregator
1个回答
1
投票

这是一个已知问题。 eventAggregator 代码中存在错误。看看下面的博客和建议的克服它的技巧 https://greenicicle.wordpress.com/2010/04/28/prism-event-aggregator-more-leaky-than-it-seems/

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.