Qual è il metodo migliore per caricare Visualizzazioni dinamicamente da un controllo di navigazione in Prism

StackOverflow https://stackoverflow.com/questions/1678423

  •  16-09-2019
  •  | 
  •  

Domanda

Ho implementato la navigazione attraverso la mia applicazione che utilizza un controllo di menu che pubblicano un evento utilizzando EventAggregator al clic di voce di menu. Qualcosa di simile, come mostrato di seguito,

this.eventAggregator.GetEvent<ViewRequestedEvent>()
                    .Publish(new BusinessObject.Model.MenuModel
                    {
                        Module = "Dashboard",
                        PresenterClass = "DashboardViewModel"
                    });

La maggior parte dei moduli della mia applicazione sono abbonato a questo evento. Usano un filtro di sottoscrivere solo gli eventi rilevanti per il modulo

this.eventAggregator.GetEvent<ViewRequestedEvent>()
            .Subscribe(LoadViewRequest, ThreadOption.UIThread, true, i => i.Module == "Dashboard");

Richiesta di vista viene gestita in questo modo:

private void LoadRequestedView(MenuModel menuItem)
{
    try
    {
        IDashboardViewModel viewModel = this.container.Resolve(Type.GetType(menuItem.PresenterClass)) as IDashboardViewModel;
        this.regionManager.Regions["ViewRegion"].Add(viewModel.View);
        this.regionManager.Regions["ViewRegion"].Activate(viewModel.View);
        this.eventAggregator.GetEvent<ViewNotificationEvent>().Publish(menuItem.Description);
    }
    catch (ResolutionFailedException) { }
}

Come valuti questa implementazione? Se vi fa schifo, mi aiuti a migliorare o suggerire una migliore alternativa.

È stato utile?

Soluzione

Penso che tu abbia una certa mancanza di separazione degli interessi con questo modello. Io in genere cerco di mantenere presentazione alla Shell. Vedere questa domanda per come ho wold implementare questa. Si semplifica le cose e astrae l'idea di una RegionManager lontano dai moduli:

Integrazione moduli con applicazioni in Prism aka CompositeWpf

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top