针对DevExpress的带有自定义RegionAdapter的RegionManager出现问题

针对DevExpress的带有自定义RegionAdapter的RegionManager出现问题,devexpress,prism,mef,ribbon,regionadapter,Devexpress,Prism,Mef,Ribbon,Regionadapter,我为DevExpress功能区编写了一个自定义区域适配器 public class dxDocumentGroupRegionAdapter : RegionAdapterBase<DocumentGroup> { private DocumentGroup _instance; public dxDocumentGroupRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : ba

我为DevExpress功能区编写了一个自定义区域适配器

public class dxDocumentGroupRegionAdapter : RegionAdapterBase<DocumentGroup>
{
    private DocumentGroup _instance;

    public dxDocumentGroupRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
        : base(regionBehaviorFactory)
    { }

    protected override IRegion CreateRegion()
    {
        return new AllActiveRegion();
    }

    protected override void Adapt(IRegion region, DocumentGroup regionTarget)
    {
        _instance = regionTarget;
        regionTarget.Items.Clear();

        region.ActiveViews.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler((x, y)
        =>
        {
            switch (y.Action)
            { 
                case NotifyCollectionChangedAction.Add:
                    foreach (object __panel in y.NewItems)
                    {
                        if (__panel is DocumentPanel)
                            _instance.Items.Add(__panel as DocumentPanel);
                        else
                        {
                            if (__panel is UIElement)
                            {
                                DocumentPanel panel = new DocumentPanel();
                                panel.Content = __panel;

                                _instance.Items.Add(panel);

                            }
                        }
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (DocumentPanel __panel in y.NewItems)
                    {
                        _instance.Items.Remove(__panel);

                    }
                    break;
            }
        });

        region.ActiveViews.ToList().ForEach( x => regionTarget.Items.Add(x as DocumentPanel));
    }
但是没有成功。 奇怪的是

rManager.RegisterViewWithRegion("regionName", typeof(view))
适用于我,但rManager.RequestNavigate不适用

有什么想法吗

编辑

我找到了解决这个问题的办法。 我必须手动注册我的地区:

 IRegionAdapter regionAdapter = new Prism.dxDocumentGroupRegionAdapter(this.Container.GetExportedValue<IRegionBehaviorFactory>());
 IRegion region = regionAdapter.Initialize(this.documentContainer, Types.ConstantValues.MainRibbonTabRegionName);
 this.tRegionManager.Regions.Add(region);
IRegionAdapter regionAdapter=new Prism.dxDocumentGroupRegionAdapter(this.Container.GetExportedValue());
IRegion region=regionAdapter.Initialize(this.documentContainer,Types.ConstantValues.MainRibbonTabRegionName);
this.tRegionManager.Regions.Add(region);

我看到上面你找到了解决方案。但是,对于其他问题,如果我发布了我曾经遇到的相关问题,并且DevX支持解决方案链接

我对DevExpress DXTabControl也有类似的问题,在导航时(从Prism模块),它将不会显示所需的选项卡。DevExpress支持人员认识到这是一个问题。所以他们在下面的论坛帖子中给出了一个解决方案

基本上,对于某些devX控件,自定义适配器中的行为也需要重写。(就我的情况而言,这是一种控制

这是链接,遵循DevX support Alexander的最后一个pot,下载他的示例,并在bootstrapper文件中对自定义适配器进行编码(您可以将其放在单独的类中,我猜他只是急于给出解决方案)


对于document group,我还没有尝试过,但我将尝试重新创建您的问题,并查看相同的解决方案(通过覆盖适配器中的行为)是否也适用于该问题。

我也有相同的问题,不幸的是,我的应用程序严重依赖RequestNavigate来实现您的解决方案。。
rManager.RegisterViewWithRegion("regionName", typeof(view))
 IRegionAdapter regionAdapter = new Prism.dxDocumentGroupRegionAdapter(this.Container.GetExportedValue<IRegionBehaviorFactory>());
 IRegion region = regionAdapter.Initialize(this.documentContainer, Types.ConstantValues.MainRibbonTabRegionName);
 this.tRegionManager.Regions.Add(region);