Komplexe Objekte zwischen Pages übergeben

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.