Calling Navigate From The View Model

Windows Phone Mini-Tutorial

In the third part of the MVVM Light Toolkit Soup To Nuts (part 1 is here) I started with an application that had two pages, and a button on the first that was to cause a navigation to the second page.  You can download the starting source code here

In that article I explained how the VM cannot call the Navigate service, but that you could use messaging to have the View make the call.  While that is correct, there is an easier way; which is to grab the rootFrame and to call Navigate on that.

To do this, open the starting application and navigate to the GoToPage2() method that is called by the relay command.  Remove the MessageBox and instead add this line to obtain the RootFrame of the current application,

var rootFrame = (App.Current as App).RootFrame;

Once you have that in hand, you can call the navigation service directly from the View Model,

 

rootFrame.Navigate( 
  new System.Uri( "/Views/Page2.xaml", System.UriKind.Relative ));

This greatly simplifies the code and avoids the added complexity of using messaging back to the original page to perform the navigation.

About Jesse Liberty

Jesse Liberty has three decades of experience writing and delivering software projects and is the author of 2 dozen books and a couple dozen online courses. His latest book, Building APIs with .NET will be released early in 2025. Liberty is a Senior SW Engineer for CNH and he was a Senior Technical Evangelist for Microsoft, a Distinguished Software Engineer for AT&T, a VP for Information Services for Citibank and a Software Architect for PBS. He is a Microsoft MVP.
This entry was posted in Mango, Mini-Tutorial, Patterns & Skills and tagged . Bookmark the permalink.

9 Responses to Calling Navigate From The View Model

Comments are closed.