title: Advice on Views navigation using Caliburn.Micro MVVM WPF
body: <p>I'm new on Caliburn Micro and want some advice on which path to take to devolop my app interface and navigation between views. 
  My idea is to have a MainWindow which will contain a menu of buttons, each one related with a specific view. Each view will be stored in a separated WPF UserControl. The mainWindow will also contain a TabControl bound to an ObservableCollection of tabs on viewmodel. Everytime a button on menu is clicked, I want to add a new tab with a ContentPresenter inside that will dynamically load a view and its corresponding viewmodel. </p>
  
  <p><strong>So my questions:</strong></p>
  
  <blockquote>
    <p>1) Should I use a Screen Collection here? </p>
    
    <p>2) Should the UserControl implement Screen interface?</p>
    
    <p>3) How do I tell MainWindow ViewModel which view to load on the new added tab maintaining viewmodels decoupled?</p>
  </blockquote>
  
  <p>Thanks to everyone in advance.</p>
  
  <p><strong>UPDATE</strong></p>
  
  <p>After a lot of reading and some help of the community I managed to resolve this. This is the resultant AppViewModel:</p>
  
  <pre><code>class AppViewModel : Conductor&lt;IScreen&gt;.Collection.OneActive
  {
      public void OpenTab(Type TipoVista)
      {
          bool bFound = false;
          Screen myScreen = (Screen)Activator.CreateInstance(TipoVista as Type);
          myScreen.DisplayName = myScreen.ToString();
          foreach(Screen miItem in Items)
          {
              if (miItem.ToString() == myScreen.ToString())
              {
                  bFound = true;
                  ActivateItem(miItem);
              }                
          }
          if (!bFound) ActivateItem(myScreen);        
      }
  
      public ObservableCollection&lt;MenuItem&gt; myMenu { get; set; }
      public ObservableCollection&lt;LinksItem&gt; myDirectLinks { get; set; }
  
      public ICommand OpenTabCommand
      {
          get
          {                
              return new RelayCommand(param =&gt; this.OpenTab((Type) param), null);
          }
      }       
  
      public AppViewModel()
      {
          OpenTab(typeof(ClientsViewModel));            
          MenuModel menu = new MenuModel();
          myMenu = menu.getMenu();
          myDirectLinks = menu.getLinks();
      }        
  
      public void CloseTab(Screen param)
      {            
          DeactivateItem(param, true);
      }    
  }
  </code></pre>
  
  <p>I have to keep the ICommand from OpenTabCommand because the name convention of Caliburn.micro doesn't seems to work inside DataTemplate. Hope it could help someone else. Thanks to all</p>