Quelle est la meilleure méthode pour charger dynamique des vues à partir d'une commande de navigation dans Prism

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

  •  16-09-2019
  •  | 
  •  

Question

J'ai navigation Mis en œuvre par mon application à l'aide d'une commande de menu qui publient un événement en utilisant EventAggregator sur clic de menu. Quelque chose comme comme indiqué ci-dessous,

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

La plupart des modules dans ma demande sont abonné à cet événement. Ils utilisent un filtre pour vous inscrire uniquement les événements pertinents au module

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

Demande de vue est traitée comme ceci:

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) { }
}

Quelle note donneriez-vous cette mise en œuvre? Si vous pensez qu'il suce, me aider à améliorer ou suggérer une meilleure alternative.

Était-ce utile?

La solution

Je pense que vous avez un certain manque de séparation des préoccupations avec ce modèle. J'essaie généralement de garder présentation au Shell. Voir cette question pour savoir comment je Wold mettre en œuvre. Il simplifie les choses et les résumés l'idée d'un RegionManager loin des modules:

intégration de modules avec application dans Prism aka CompositeWpf

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top