Prism 通常会将视图保留在内存中,并在使用RegionManager.RequestNavigate
切换视图时再次加载这些视图。
我真的很喜欢在内存中加载现有视图这一事实。但在某些时候我想彻底销毁( Garbage Collected )现有视图,并希望加载新的新视图。
示例方案
例如,有一个" CustomerList"查看显示带有电子邮件地址的客户列表。当我点击列表中的一个客户时,新的" SendEmail"将加载带有填充电子邮件地址的视图。当我点击取消时,它将返回" CustomerList"视图。
当我再次单击列表中的同一客户时,它将显示" SendEmail"视图实例已经存在于内存中。
但是当我点击列表中的另一个客户时,该程序应该删除现有的" SendEmail"在内存中查看实例并创建新的" SendEmail"查看填充的电子邮件地址。
问题
我知道可以使用IsNavigationTarget
界面中的INavigationAware
方法解决此问题。但 Prism 只需创建新的" SendEmail"查看实例,不要删除现有的" SendEmail"从记忆中查看。在我的假设中(不确定),创建新的View实例(不删除旧的实例)会不必要地使内存膨胀。
我应该如何解决这个问题,还是有其他解决方法?
为什么IRegionMemberLifetime
不是答案?
KeepAlive
的{{1}}属性可以强制取消视图,并在视图导航离开时从区域中删除。但是IRegionMemberLifetime
属性是KeepAlive
属性,并且自创建View实例以来必须设置readonly
或true
。
在我的问题中,我希望立即删除视图立即导航视图。 当视图导航离开时,我仍然希望将视图保留在内存中。我只想在我确定不再需要此视图时删除该视图。
答案 0 :(得分:0)
所以基本上你要问的是,"我怎样才能删除一个视图?"。您不知道何时将其删除,但是当您准备好时需要将其删除?在这种情况下,您需要从区域中手动删除视图。一种方法可能是在准备删除视图时使用EventAggregator发布RemoveEvent,然后对其进行响应。
另一个选择是创建一个自定义区域行为来监视View的生命周期并以这种方式进行管理。