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.
9 Responses to Calling Navigate From The View Model