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?
Use global variables, make a new class for GlobalVariables:
Then you can access the Global Variables class for different pages:
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
In his book "Programming Windows Phone 7" (chapter 6, section 3, "Sharing Data Among Pages") Charles Petzold recommends properties in the
App
class (derived fromApplication
). Every page has access to it viaApplication.Current
. Also interesting is the dictionaryPhoneApplicationService.Current.State
. It's usefull for tombstoning. The whole chapter maybe interesting for reading.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.
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!