【问题标题】:Prism view available after navigate from从导航后可用棱镜视图
【发布时间】:2016-11-25 14:00:29
【问题描述】:

我在使用最新稳定版本 6.2.0 的 wpf 应用程序中使用 prism

我已设置 prism 以在视图模型上使用 IRegionMemberLifetime 接口,并将 KeepAlive 属性设置为返回 false。在视图模型中,当它创建时,我使用以下代码注册到 IEventAggregator 事件。

EventAggregator.GetEvent<NewLayerSetEnabledEvent>().Subscribe(NewLayersetEnabledAction);

我遇到的问题是,从视图导航后,视图模型仍然存在,并且当我发布事件时,另一个视图也被调用。有没有办法强制在导航视图后由 GC 处理视图,或者在调用 OnNavigatedFrom 事件时我是否需要取消订阅事件。

【问题讨论】:

    标签: c# wpf prism


    【解决方案1】:

    关于 .Net CLR 中的垃圾收集器,您必须始终牢记的重要一点是,您(通常)不知道它何时运行。 (当然,您可以使用 GC.Collect() 方法等强制垃圾收集器运行,但这是一个例外,不应过度使用 - 请参阅 this srticle

    因此,请记住这一点,您永远无法确定您的视图何时会被 GC'ed。一般来说,它可能仍然存在一段时间,甚至可以存活到应用程序关闭(参见Generation 2)。

    如果您想确保关闭视图的视图模型不再主动响应 EventAggregator 引发的事件,您必须在视图删除后取消订阅所有事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多