title: Swap RootViewController with MVVMCross
body: <p>I need to implement a login/logout using MVVMCross, iOS only to start. After the user logs in, I want to close the view and make the "real" first view the root controller. For logout, I want to do the same in reverse. Whenever the LoginViewModel is requested, clear the root and replace it. </p>
  
  <p>This <a href="https://stackoverflow.com/questions/13934748/remove-viewcontroller-from-stack">Remove ViewController from stack</a> indicates there is a ClearTop parameter, but it looks like it is gone in v3?</p>
  
  <p>I then found this <a href="https://stackoverflow.com/questions/16157597/what-is-the-best-way-to-handle-goback-for-the-different-mvvmcross-v3-platforms">What is the best way to handle GoBack for the different MvvmCross (v3) platforms</a> and I implemented this Presenter:</p>
  
  <pre><code>        public override void Close(IMvxViewModel toClose)
          {
              if (toClose is LoginViewModel)
              {
                  ClearBackStack();
                  Show(new MvxViewModelRequest() { ViewModelType = typeof(FirstViewModel)});
                  return;
              }
              base.Close(toClose);
          }
  
          public override void Show(MvxViewModelRequest request)
          {
              if (request.ViewModelType == typeof (LoginViewModel))
              {
                  ClearBackStack();
              }
              base.Show(request);
          }
  </code></pre>
  
  <p>Is this the correct way to handle this? Is there an easier mechanism (pre-v3 like)? Should I be overriding ChangePresentation instead?</p>
  
  <p>Also, is there a mechanism to call ShowViewModel from a View? Do I need to resolve the IMvxViewDispatcher or is there a more straight forward method?</p>