¿Cómo “navegar” con un adaptador personalizado de Prism?
Tengo un Adaptador de Región Personalizado de Prism para mostrar cada vista en una pestaña diferente de nuestro DevExpress “DocumentGroup”.
Para hacer esto, tengo el siguiente Adaptador de Región:
public class DocumentGroupRegionAdapter : RegionAdapterBase<documentgroup>
{
public DocumentGroupRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, DocumentGroup regionTarget)
{
region.Views.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Add)
{
foreach (FrameworkElement element in args.NewItems)
{
DocumentPanel documentPanel = new DocumentPanel {Content = element, DataContext = element.DataContext};
regionTarget.Items.Add(documentPanel);
}
}
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
Siendo AllActiveRegion lo siguiente:
public class AllActiveRegion : Region
{
public override IViewsCollection ActiveViews
{
get { return Views; }
}
public override void Deactivate(object view)
{
throw new InvalidOperationException(Resources.DeactiveNotPossibleException);
}
}
Y estábamos registrando varias vistas para esta región:
_regionManager.RegisterViewWithRegion(Regions.MainSections, typeof(Views.Layout.RootView));
_regionManager.RegisterViewWithRegion(Regions.MainSections, typeof(Views.Configure.RootView));
_regionManager.RegisterViewWithRegion(Regions.MainSections, typeof(Views.Dashboard.RootView));
Funcionaba bien hasta ahora, pero en ciertas opciones, necesitamos activar una de las pestañas. Esto se haría llamando a item.IsActive = true
.
¿Cómo especifico qué elemento quiero navegar?
¿Qué debo anular para establecer este elemento activo?
davy.ai
Para especificar a qué elemento deseas navegar, debes anular el método
Navigate
en tu claseDocumentGroupRegionAdapter
. Aquí tienes un ejemplo:Este código busca el
DocumentPanel
que contiene el objetonavigationTarget
como suContent
. Si encuentra una coincidencia, establece eseDocumentPanel
como el elemento activo estableciendo su propiedadIsActive
entrue
. Luego puedes llamar al métodoNavigate
en la región para activar la pestaña deseada.