J'ai implémenté la navigation dans mon application en utilisant un contrôle Menu qui publie un événement en utilisant EventAggregator en cliquant sur l'élément de menu. Quelque chose comme indiqué ci-dessous,Quelle est la meilleure méthode pour charger des vues dynamiquement à partir d'un contrôle de navigation dans Prism
this.eventAggregator.GetEvent<ViewRequestedEvent>()
.Publish(new BusinessObject.Model.MenuModel
{
Module = "Dashboard",
PresenterClass = "DashboardViewModel"
});
La plupart des modules de mon application sont abonnés à 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 que ça craint, aidez-moi à l'améliorer ou à suggérer une meilleure alternative.