【问题标题】:navigation in not working when [PartCreationPolicy(CreationPolicy.Shared)] in prism棱镜中的 [PartCreationPolicy(CreationPolicy.Shared)] 导航不起作用
【发布时间】:2013-05-19 14:48:39
【问题描述】:

在我的 prism 应用程序中,我想创建一个视图的共享实例。当我第一次尝试导航时它工作正常,但是当我尝试第二次时它不起作用。如果我将 PartCreationPolicyShared 更改为 NonShared 它可以工作,但它给了我一个新实例。有没有其他方法可以做到这一点?

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

【问题讨论】:

  • 您能否更具体地说明“它不起作用”是什么意思?您可能还想解释为什么您希望这是一个单例。
  • 你可能在这里找到实际问题http://stackoverflow.com/questions/16741667/exception-region-with-the-given-name-is-already-registered

标签: c# mef wpf-4.0 prism-4


【解决方案1】:

您可能想为您的视图使用 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 属性here 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2012-03-16
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多