Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

MVVM Light Toolkit and Windows Phone : Navigation Between Pages

0.00/5 (No votes)
13 Aug 2014 1  
This tip/trick shows you how to add navigation between pages with MVVM Light Toolkit in Windows Phone 8

Introduction

The following code snippets will show you how to add the basic navigation between pages in Windows phone 8 with MVVM Light Toolkit.

Using the code

To achieve our goal, as mentioned before, we will need to implement an Interface and a Class.

"INavigationService" interface :

First, we'll begin by adding "INavigationService" interface :

public interface INavigationService
{
    event NavigatingCancelEventHandler Navigating;
    void NavigateTo(Uri pageUri);
    void GoBack();
}

It allows :

  • Navigation to a given URI.
  • Going back
  • Being notified when a navigation is taking place, and be able to cancel

"NavigationService" class :

Then, we'll add the "NavigationService" class

public class NavigationService : INavigationService
{
    private PhoneApplicationFrame _mainFrame;

    public event NavigatingCancelEventHandler Navigating;

    public void NavigateTo(Uri pageUri)
    {
        if (EnsureMainFrame())
        {
            _mainFrame.Navigate(pageUri);
        }
    }

    public void GoBack()
    {
        if (EnsureMainFrame() && _mainFrame.CanGoBack)
        {
            _mainFrame.GoBack();
        }
    }

    private bool EnsureMainFrame()
    {
        if (_mainFrame != null)
        {
            return true;
        }

        _mainFrame = Application.Current.RootVisual as PhoneApplicationFrame;

        if (_mainFrame != null)
        {
            // Could be null if the app runs inside a design tool
            _mainFrame.Navigating += (s, e) =>
            {
                if (Navigating != null)
                {
                    Navigating(s, e);
                }
            };

            return true;
        }

        return false;
    }
}

Registering the Navigation Service (ViewModelLocator):

Before using the Navigation Service, we need to register it in the IOC (I'm using SimpleIoc).

SimpleIoc.Default.Register<INavigationService, NavigationService>();

Using the Navigation Service (MainPage):

navigationService = SimpleIoc.Default.GetInstance<INavigationService>();

Navigating to the next page (MainPage):

As the classic way to navigate to other pages, using this method is quite simple. Just use it as you do in a simple app.

You can also add parameters.

navigationService.NavigateTo(new Uri("/SecondPage.xaml?ParamName=ParamValue", UriKind.Relative));

 

That's it! I hope it was helpful.

History

This is the first version of this tip/trick. If you have any problem/question, feel free to comment.

You're welcome. Enjoy!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here