Проблема с RegionManager с пользовательским RegionAdapter для DevExpress
Я написал собственный адаптер региона для ленты 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 ответ
Я вижу выше, вы нашли решение. Однако для дополнительной проблемы, если есть, я публикую связанную проблему, и DevX поддерживает ссылку на решение.
У меня была похожая проблема с DevExpress DXTabControl, когда при навигации (из модуля Prism) он не отображал нужную вкладку. Поддержка DevExpress признала, что это проблема. Таким образом, они дали решение в следующем сообщении на форуме.
По сути, поведение для настраиваемого адаптера также должно быть изменено для определенных элементов управления devX. (для моего случая это был DXTabControl.
Вот ссылка, и следуйте последнему горшку от DevX, поддерживающему Александра, и скачайте его образец, и он закодировал пользовательский адаптер в файле начальной загрузки (вы можете поместить его в отдельный класс, который должен быть, я думаю, он просто бросился давать решение).
http://www.devexpress.com/Support/Center/p/Q360416.aspx
С группой документов я не пробовал, но я постараюсь воссоздать вашу проблему и посмотреть, работает ли там то же решение (путем переопределения поведения в адаптере).