【问题标题】:Close view that contains Regions关闭包含区域的视图
【发布时间】:2012-02-18 17:16:06
【问题描述】:

我有一个视图,我们称之为“NestedView”,它定义了嵌套区域,由于 XAML 中缺乏嵌套区域支持,我在 UserControl 构造函数中创建了一个视图,如下所示:

RegionManager.SetRegionName(RegionControl, "MyRegionName");
RegionManager.SetRegionManager(RegionControl, _globalRegionManager);

'NestedView' 显示(添加)到某个区域,我们称之为“MainRegion”,有时我需要关闭此视图(将其从“MainRegion”中删除)。但是,如果我只是从“MainRegion”中删除“NestedView”,它已注册“MyRegionName”的区域将保持注册状态,下次我将尝试打开“NestedView”时,它将抛出区域“MeregionName”已注册的异常。

所以我需要确保当我关闭包含区域的视图时,它们是未注册的,并且它们包含的所有视图都已处置。最好的方法是什么?

【问题讨论】:

    标签: c# prism prism-4


    【解决方案1】:

    我在 NavigationService 中想出了这个方法:

    public interface IRegionContainer
    {
        IEnumerable<String> RegionNames { get; }
    }
    
        public void RequestClose(string regionName, string viewContract)
        {
            ContainerRegistration registration = _unityContainer.Registrations.SingleOrDefault(t => t.Name == viewContract);
            if (registration == null) throw new Exception("ViewContract is not registered");
            IEnumerable<object> candidateViews = _regionManager.Regions[regionName].Views.Where(t => t.GetType() == registration.MappedToType);
            foreach (object viewInstance in candidateViews)
            {
                var regionContainer = viewInstance as IRegionContainer;
                if (regionContainer != null) //View defines regions?
                {
                    foreach (string rName in regionContainer.RegionNames)
                    {
                        var success = _regionManager.Regions.Remove(rName);
                        if (success == false) throw new Exception("Can't remove region: " + rName);
                    }
                }
                _regionManager.Regions[regionName].Remove(viewInstance);
            }
        }
    

    此外,PRISM 4.1 已经发布,他们声称可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多