es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para especificar a qué elemento deseas navegar, debes anular el método Navigate en tu clase DocumentGroupRegionAdapter. Aquí tienes un ejemplo:

    protected override void Navigate(DependencyObject parent, object navigationTarget)
    {
        var documentGroup = parent as DocumentGroup;
        if (documentGroup == null)
        {
            return;
        }
    
        var itemToActivate = documentGroup.Items
            .OfType<documentpanel>()
            .FirstOrDefault(item => item.Content == navigationTarget);
    
        if (itemToActivate != null)
        {
            itemToActivate.IsActive = true;
        }
    }
    

    Este código busca el DocumentPanel que contiene el objeto navigationTarget como su Content. Si encuentra una coincidencia, establece ese DocumentPanel como el elemento activo estableciendo su propiedad IsActive en true. Luego puedes llamar al método Navigate en la región para activar la pestaña deseada.

Comments are closed.