23

In a Windows Phone 7 Silverlight application I call a new page using

NavigationService.Navigate(new Uri("/View/SecondPage.xaml", UriKind.Relative));

Now I want to pass parameters to the new page. I understand a simple parameter can be passed using:

NavigationService.Navigate(new Uri("/View/TilgungsratePage.xaml?id=4711", UriKind.Relative));

and read in the new page using

protected override void OnNavigatedTo(Microsoft.Phone.Navigation.PhoneNavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    String id = NavigationContext.QueryString["id"]; 
} 

For simple parameters this is ok, but how do I pass a list?
Complex objects?
Anything but simple values?

Sam
  • 28,421
  • 49
  • 167
  • 247
  • Take a look at this post as well: [WP7 Master - Detail Navigation with Repository Pattern](http://windowsphonegeek.com/articles/WP7-Master---Detail-Navigation-with-Repository-Pattern) – Kate Brown Jun 13 '12 at 15:12
  • 1
    Check out the last method on this link: http://www.c-sharpcorner.com/UploadFile/deepak.sharma00/different-ways-of-passing-values-between-windows-phone-7-pag/ – Daniel Little Sep 16 '12 at 05:36
  • Have a look at this question http://stackoverflow.com/questions/12444816/how-to-pass-values-parameters-between-xaml-pages – Daniel Little May 13 '13 at 23:43

5 Answers5

21

In his book "Programming Windows Phone 7" (chapter 6, section 3, "Sharing Data Among Pages") Charles Petzold recommends properties in the App class (derived from Application). Every page has access to it via Application.Current. Also interesting is the dictionary PhoneApplicationService.Current.State. It's usefull for tombstoning. The whole chapter maybe interesting for reading.

Lars
  • 6,421
  • 1
  • 23
  • 24
  • And it you don't want to have global state there are other methods http://stackoverflow.com/questions/12444816/how-to-pass-values-parameters-between-xaml-pages – Daniel Little Feb 06 '13 at 23:57
2

You should also look at MVVM pattern and the messenger class.

Here's some references:

MVVM Overview

MVVM Foundation Messenger

Good SO question on the messenger from MVVM Light

MVVM Light Blog

Community
  • 1
  • 1
Chris Nicol
  • 10,256
  • 7
  • 39
  • 49
0

Use global variables, make a new class for GlobalVariables:

public static class GlobalVariables
{
   public static string my_string = "";
   public static int my_int = -1;
}

Then you can access the Global Variables class for different pages:

GlobalVariables.variable_name;
jihchuan
  • 307
  • 1
  • 5
  • 14
0

take a look how I've implemented navigation in PhoneCore Framework: A framework for building of WP7 application. Shortly, I've built my navigation service on top of WP7 navigation. It uses custom page mapping and allows to pass custom parameters to view model automatically.

Ilya Builuk
  • 2,189
  • 2
  • 16
  • 10
-1

You should save the object to IsolatedStorage.

Just Serialize it with Json.net library and save the string to IsolatedStorage. On the next page get the string from IsolatedStorage and convert it back to the object you want with the json.net library!

w.donk
  • 3,252
  • 1
  • 18
  • 15
  • I think this is way overkill just to pass between views. Much better to put the data into the App object. – Nathan May 02 '12 at 13:35