【发布时间】:2016-03-14 12:27:54
【问题描述】:
Prism 通常将视图保存在内存中,并在使用RegionManager.RequestNavigate 切换视图时再次加载这些视图。
我真的很喜欢在内存中加载现有视图。但是在某个时候我想完全销毁(Garbage Collected)现有视图并想加载新的新视图。
示例场景
例如,有一个“CustomerList”视图显示具有电子邮件地址的客户列表。当我单击列表中的一位客户时,将加载带有填充电子邮件地址的新“SendEmail”视图。当我单击取消时,它将返回到“CustomerList”视图。
当我再次点击列表中的同一个客户时,它会显示内存中已经存在的“SendEmail”视图实例。
但是当我点击列表中的另一个客户时,程序应该删除内存中现有的“SendEmail”视图实例,并使用填充的电子邮件地址创建新的“SendEmail”视图。
问题
我知道它可以通过INavigationAware 接口中的IsNavigationTarget 方法解决。但是Prism 只是创建新的“SendEmail”视图实例,而不是从内存中删除现有的“SendEmail”视图。在我的假设中(不确定),创建新的 View 实例(不删除旧的)会不必要地膨胀内存。
我应该如何解决这个问题或有其他解决方法?
为什么IRegionMemberLifetime 不是答案?
IRegionMemberLifetime 的KeepAlive 属性可以在视图被导航离开时强制视图被停用并从区域中移除。但是KeepAlive 属性是readonly 属性,并且必须在创建视图实例后设置true 或false。
在我的问题中,我不希望视图在导航离开后立即被删除。 当视图被导航离开时,我仍然希望将视图保留在内存中。当我确定不再需要该视图时,我只想删除该视图。
【问题讨论】:
-
IRegionMemberLifetime 接口和 KeepAlive 属性怎么样?
-
@galakt 请看我的编辑。