控制视图的生命周期
Prism-Documentation-CH
2023-2-6
IRegionMemberLifetime
在新视图被实例化、初始化并添加到目标区域之后,它就变成了活动视图,而前一个视图则会被停用。有时您会希望从区域中删除停用的视图。因此Prism提供了IRegionMemberLifetime接口,通过允许您指定停用的视图是从区域中删除还是简单地标记为停用,从而使您可以控制区域内视图的生命周期。
public class EmployeeDetailsViewModel : BindableBase, IRegionMemberLifetime
{
public bool KeepAlive
{
get { return true; }
}
}
IRegionMemberLifetime接口定义了一个只读属性KeepAlive。如果此属性返回false,则视图在停用时会从区域中删除。因为该区域不再具有对该视图的引用,所以它可以被垃圾回收(除非您的应用程序中的某些其他组件维持了对它的引用)。您可以在视图或视图模型上实现此接口。尽管IRegionMemberLifetime接口的主要目的是让您在激活和停用期间管理区域内视图的生命周期,但在目标区域激活新视图后的导航过程中也会考虑KeepAlive属性。
RegionMemberLifetimeAttribute
您可以使用属性来完成同样的事情。
[RegionMemberLifetime(KeepAlive = true)]
public class EmployeeDetailViewModel : BindableBase
{
}
注意: 可以显示多个视图的区域将同时显示非活动视图和活动视图,例如使用ItemsControl或TabControl的区域。从这些类型的区域中移除非活动视图将导致该视图从UI中移除。