Qual é o melhor método para carregar Visualizações dinamicamente a partir de um controle de navegação em Prism

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

  •  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.

Foi útil?

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:

Integrar módulos com aplicação em Prism aka CompositeWPF

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top