title: Navigation with Caliburn Micro
body: <p>I'm playing around with Caliburn.Micro and have a very simple application now.</p>
  
  <p>It has an AppView, which actually has a ContentControl for a NavigationBar, an InnerView and a StatusBar.</p>
  
  <p>Now I want to handle Navigation between different inner views.</p>
  
  <p>Right now I use the eventaggregator to publish a NavigationEvent, which should
  switch the innerview of the mainwindow to another view.</p>
  
  <p>Here is my call to Publish (all InnerViews have the same baseclass which has an IEventAggregator)</p>
  
  <pre><code>public void NavigateOverview()
  {
      base._eventAggregator.Publish(new NavigateEvent("OverviewViewModel"));
  }
  </code></pre>
  
  <p>Right now I pass a string to the AppViewModel, which handles the NavigateEvent:</p>
  
  <pre><code>        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;
          }
  </code></pre>
  
  <p>Passing strings works, but is errorprone and not very clean.</p>
  
  <p>What is the Caliburn way of handling that?
  Is that what a Conductor should do?</p>