Im Artikel [post id=3937]Parameterübergabe zwischen mehreren Seiten[/post] haben wir bereits gelernt, wie Parameter zwischen verschiedenen Seiten (Pages) in einer Windows Phone-Applikation übergeben werden können. Die Parameter sind aber auf Zeichenketten (Strings) beschränkt, so dass mit diesem Verfahren ohne Weiteres keine komplexen Objekte übergeben werden können. Wenn man das aber tun möchte, kann man sich dem PhoneApplicationService bedienen.
Rückblick: Parameterübergabe (nur mit Strings möglich)
MainPage.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 | private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (myListBox.SelectedItem != null) { String uriString = String.Format("/FormulaPage.xaml?item={0}", myListBox.SelectedItem); Uri navigateUri = new Uri(uriString, UriKind.Relative); NavigationService.Navigate(navigateUri); myListBox.SelectedItem = null; } } |
FormulaPage.xaml.cs
1 2 3 4 5 6 7 8 | protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { string item = String.Empty; if (NavigationContext.QueryString.TryGetValue("item", out item)) { PageTitle.Text = item; }; } |
Neu: Objekte übergeben
MainPage.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | using Microsoft.Phone.Shell; ... private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (myListBox.SelectedItem != null) { PhoneApplicationService.Current.State["SelectedItem"] = myListBox.SelectedItem; String uriString = "/FormulaPage.xaml"; Uri navigateUri = new Uri(uriString, UriKind.Relative); NavigationService.Navigate(navigateUri); } } |
FormulaPage.xaml.cs
1 2 3 4 5 6 7 8 | using Microsoft.Phone.Shell; ... protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { MyClass myObject = PhoneApplicationService.Current.State["SelectedItem"] as MyClass; PageTitle.Text = myObject.Title; } |
Vielen Dank an Andrea Boschin für seinen Artikel Understanding navigation, der die Vorlage für diesen Post war.