gpt4 book ai didi

c# - Prism:如何从内存中删除现有的 View 实例

转载 作者:太空宇宙 更新时间:2023-11-03 15:29:40 25 4
gpt4 key购买 nike

Prism 通常将 View 保存在内存中,并在使用 RegionManager.RequestNavigate 切换 View 时再次加载这些 View 。

我真的很喜欢在内存中加载现有 View 这一事实。但是在某些时候我想完全破坏(垃圾收集)现有 View 并想加载新的新 View 。

示例场景

例如,有一个“CustomerList” View 显示具有电子邮件地址的客户列表。当我单击列表中的一位客户时,将加载填充了电子邮件地址的新“SendEmail” View 。当我单击取消时,它将返回到“CustomerList” View 。

当我再次点击列表中的同一个客户时,它会显示内存中已经存在的“SendEmail” View 实例。

但是当我点击列表中的另一个客户时,程序应该删除内存中现有的“SendEmail” View 实例并创建新的“SendEmail” View 并填充电子邮件地址。

问题

我知道它可以通过 INavigationAware 接口(interface)中的 IsNavigationTarget 方法来解决。但是 Prism 只是创建新的“SendEmail” View 实例,并不从内存中删除现有的“SendEmail” View 。在我的假设中(不确定),创建新的 View 实例(不删除旧实例)会不必要地膨胀内存。

我应该如何解决这个问题或是否有其他解决方法?

为什么 IRegionMemberLifetime 不是答案?

IRegionMemberLifetime

KeepAlive 属性可以在 View 离开时强制 View 停用并从区域中移除。但是 KeepAlive 属性是 readonly 属性,并且必须在创建 View 实例后设置 truefalse

在我的问题中,我不想立即删除 View 一旦 View 被导航离开。 当 View 被导航离开时,我仍然希望将 View 保留在内存中。我只想在确定不再需要此 View 时删除该 View 。

最佳答案

所以基本上您要问的是,“我怎样才能删除 View ?”。您不知道何时删除它,但是当您准备好时需要将其删除?在这种情况下,您需要手动从区域中删除 View 。一种方法可能是在您准备好删除 View 时使用 EventAggregator 发布 RemoveEvent,然后对此做出响应。

另一种选择是创建自定义区域行为来监控 View 的生命周期并以这种方式进行管理。

关于c# - Prism:如何从内存中删除现有的 View 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34175307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com