当[PartCreationPolicy(CreationPolicy.Shared)]在棱镜中时,导航不工作

本文关键字:棱镜 导航 工作 PartCreationPolicy CreationPolicy Shared | 更新日期: 2023-09-27 18:14:15

在我的prism应用程序中,我想创建一个视图的单个共享实例。当我第一次尝试导航时,它工作得很好,但当我第二次尝试时,它就不起作用了。如果我把PartCreationPolicyShared变成NonShared,它可以工作,但它会给我一个新的实例。有没有其他的方法来做这件事?

[Export(ViewNames.AppView)]
[PartCreationPolicy(CreationPolicy.Shared)] 
public partial class AppMain : UserControl
{
    public AppMain()
    {
        InitializeComponent();
    }
}

当[PartCreationPolicy(CreationPolicy.Shared)]在棱镜中时,导航不工作

您可能想要在您的视图中使用Prism的KeepAlive值。此值决定在从该区域导航时是否应从该区域删除视图。有两种方法:

  1. 使用RegionMemberLifetime属性

    [RegionMemberLifetime(KeepAlive = false)]
    [Export(ViewNames.AppView)]
    [PartCreationPolicy(CreationPolicy.Shared)] 
    public partial class AppMain : UserControl
    {
        public AppMain()
        {
            InitializeComponent();
        }
    }
    
  2. 实现IRegionMemberLifetime接口

    [Export(ViewNames.AppView)]
    [PartCreationPolicy(CreationPolicy.Shared)] 
    public partial class AppMain : UserControl, IRegionMemberLifetime
    {
        public AppMain()
        {
            InitializeComponent();
        }
        public bool KeepAlive
        {
            get { return false; }
        }
    }
    

您可以在这里阅读更多关于KeepAlive属性的信息