Проблема с RegionManager с пользовательским RegionAdapter для DevExpress - PullRequest
3 голосов
/ 16 мая 2011

Я написал собственный адаптер региона для ленты 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));
    }

В xaml моей оболочки я зарегистрировал регион

<dxd:DocumentGroup cal:RegionManager.RegionName="RibbonTabRegion" [...]

В коде позади я импортирую экземпляр RegionManager. По требованию загрузчик вызывает мой адаптер региона, но в моем RegionManager нет записи о регионе.Я тоже пробовал

RegionManager.SetRegionManager(this, rManager)

но безуспешно.Любопытно, что

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);

1 Ответ

1 голос
/ 18 февраля 2013

Я вижу выше, вы нашли решение. Однако для дополнительной проблемы, если есть, я публикую связанную проблему, и DevX поддерживает ссылку на решение.

У меня была похожая проблема с DevExpress DXTabControl, когда при навигации (из модуля Prism) он не отображал нужную вкладку. Поддержка DevExpress признала, что это проблема. Таким образом, они дали решение в следующем сообщении на форуме.

Как правило, поведение в настраиваемом адаптере также должно быть изменено для определенных элементов управления devX. (для моего случая это был DXTabControl.

Вот ссылка, и следуйте последнему горшку, поддерживаемому DevX Александром, и скачайте его образец, и он закодировал пользовательский адаптер в файле загрузчика (вы можете поместить его в отдельный класс, который должен быть, я думаю, он просто поспешили дать решение).

http://www.devexpress.com/Support/Center/p/Q360416.aspx

С группой документов я не пробовал, но я попытаюсь воссоздать вашу проблему и посмотреть, работает ли там то же решение (путем переопределения поведения в адаптере).

...