Different Ways of Passing Values Between Windows Phone 7 Pages


Introduction

In this article we will explore various ways of passing data between Windows Phone 7 pages. Let us assume that we have two pages in our application with the name "Page1.xaml" and "Page2.xaml". We will try to pass a value from Page1 to Page2 using different methods.

Using Fragments

We can use fragments in an URL to pass a value from Page1 to Page2.

In "Page1.xaml.cs", write the following code in a Button click event:

private void btnGo_Click(object sender, RoutedEventArgs e)
{
     this.NavigationService.Navigate(new Uri("/Page2.xaml#Deepak"), UriKind.Relative);
}

To get a value in "Page2.xaml.cs", override the OnFragmentNavitation method:

protected override void OnFragmentNavigation(FragmentNavigationEventArgs e)
{
    MessageBox.Show(e.Fragment);
}

Using QueryString

We can pass only one value using a fragment. To pass multiple values we should use QueryString.

Code to pass values in Page1.xaml.cs:

private void btnGo_Click(object sender, RoutedEventArgs e)
{
    this.NavigationService.Navigate(new Uri("/frmMap.xaml?FirstName=Deepak&LastName=Sharma", UriKind.Relative));
}

Code to get values in Page2.xaml.cs:

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    string FirstName = NavigationContext.QueryString["FirstName"];
    string LastName = NavigationContext.QueryString["LastName"];
    MessageBox.Show(FirstName + ' ' + LastName);
}

Using public property in App.xaml

It acts as declaring a static global variable in "App.xaml.cs" and using it from any part of the application.

Declare a public property in "App.xaml.cs"

public string MyName { get; set; }

Now we can access this "MyName" property from anywhere in the application using the "App.Current" object.

Code to set MyName value  in Page1.xaml

private void btnGo_Click(object sender, RoutedEventArgs e)
{
    var obj = App.Current as App;
    obj.MyName = "dpkshr";
    this.NavigationService.Navigate(new Uri("/frmMap.xaml", UriKind.Relative));
}

Code to get MyName value in Page2.xaml

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    var obj = App.Current as App;
    MessageBox.Show(obj.MyName);
}

Using OnNavigatedFrom method

OnNavigateFrom is called when we call the NavigationService.Navigate method. It has a NavigationEventArgs object as a parameter that returns the destination page with its Content property with which we can access a property of the destination page "Page2.xaml.cs"

First, in the destination page "Page2.xaml.cs", declare a property "MyAddress":

public string MyAddress { get; set; }

Now, in "Page1.xaml.cs", override the OnNavigatedFrom method:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
// NavigationEventArgs returns destination page "Page2"
    Page2 obj = e.Content as Page2;
    if (obj != null)
    {
        // Change property of destination page "Page2"
        obj.MyAddress = "New Delhi";
    }
}

Now, get the MyAddress value in "Page2.xaml.cs":

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    // This will display "New Delhi"
    MessageBox.Show(MyAddress);
}

Conclusion

In this article we saw various methods of passing values in Windows Phone 7 pages. We can use any of the methods as per our convenience.


Similar Articles