Click here to Skip to main content
15,891,033 members
Articles / Desktop Programming / XAML
Tip/Trick

MVVM Light Toolkit and Windows Phone : Navigation Between Pages

Rate me:
Please Sign up or sign in to vote.
4.60/5 (3 votes)
13 Aug 2014CPOL 11.8K   339   10  
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 :

C#
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

C#
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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Student ISAMM
Tunisia Tunisia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
-- There are no messages in this forum --