Qual é o melhor método para carregar Visualizações dinamicamente a partir de um controle de navegação em Prism
-
16-09-2019 - |
Pergunta
Eu tenho implementado de navegação através do meu aplicativo usando um controle de menu que publicar um evento usando EventAggregator no clique de item de menu. Algo como, como mostrado abaixo,
this.eventAggregator.GetEvent<ViewRequestedEvent>()
.Publish(new BusinessObject.Model.MenuModel
{
Module = "Dashboard",
PresenterClass = "DashboardViewModel"
});
A maioria dos módulos no meu aplicativo são assinante para este evento. Eles usam um filtro para inscrever-se apenas os eventos relevantes para o módulo
this.eventAggregator.GetEvent<ViewRequestedEvent>()
.Subscribe(LoadViewRequest, ThreadOption.UIThread, true, i => i.Module == "Dashboard");
Pedido de vista é tratada como este:
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) { }
}
Como você avalia essa implementação? Se você acha que é uma porcaria, ajuda-me a melhorar ou sugerir uma alternativa melhor.
Solução
Eu acho que você tem uma certa falta de separação de interesses com este modelo. Eu geralmente tentar manter a apresentação ao Shell. Veja esta pergunta para como eu Wold implementar isso. Ele simplifica as coisas e abstrai a idéia de um RegionManager longe dos Módulos: