Navegação com o Caliburn Micro
Estou brincando com o Caliburn.Micro e tenho uma aplicação muito simples agora.
Ele tem um AppView, que na verdade tem um ContentControl para um NavigationBar, um InnerView e um StatusBar.
Agora quero manipular a Navegação entre diferentes visões internas.
No momento, uso o eventaggregator para publicar um NavigationEvent, que deve alternar a visão interna da janela principal para outra exibição.
Aqui está minha chamada para Publicar (todos os InnerViews têm a mesma baseclass que possui um IEventAggregator)
public void NavigateOverview()
{
base._eventAggregator.Publish(new NavigateEvent("OverviewViewModel"));
}
Agora eu passo uma string para o AppViewModel, que lida com o NavigateEvent:
public void Handle(NavigateEvent navigate)
{
InnerViewModel target;
switch (navigate.TargetViewModel)
{
case "SelectProjectViewModel":
{
target = new SelectProjectViewModel(_eventAggregator);
break;
}
case "OverviewViewModel":
{
target = new OverviewViewModel(_eventAggregator);
break;
}
default:
{
throw new InvalidOperationException("no target type found");
}
}
this.CurrentInnerViewModel = target;
}
Passar strings funciona, mas é propenso a erros e não é muito limpo.
Qual é a maneira Caliburn de lidar com isso? É isso que um condutor deveria fazer?