WPF PRISM事件订阅不会死亡

时间:2010-11-30 04:58:40

标签: wpf prism eventaggregator

我有一个PRISM RegionManager,它有几个区域 - 顶部是一个Ribbon区域,另一个是我内部视图的主要内容区域 - 非常基本。

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

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

这一切都很有效,除了在我调用Remove()之后第二个视图处于活动状态时,并保持对其生命周期内所做的任何订阅的处理!我曾尝试使用false显式调用Subscribe来表示弱事件引用,但无论如何这都是默认值,并没有帮助。我尝试了两种类型的创建视图(发现和注入)并通过删除和取消激活删除视图。他们都没有帮助。这是一个真正的问题,因为当我想在将来创建相同的视图时(该视图的一个新实例),我留下了它们的几个实例,所有订阅相同的事件,即使其中一些实例是很久以前从地区经理处删除。

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

我觉得我在这里做些傻事,但这让我感到非常难过。

由于

1 个答案:

答案 0 :(得分:1)

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

希望这有帮助