Wer zwischen mehreren Windows Phone-Pages Parameter übergeben möchte, der hat es mit dem NavigationService nicht schwer. Als Beispiel nehmen wir die uns bereits bekannte ListBox mit dem klangvollem Namen myListBox
(siehe [post id=3810]dieses Beispiel[/post]).
Die ListBox verfügt über eine SelectionChanged-Methode, die angesprochen wird, sobald ein Item aus der ListBox ausgewählt wird. Diese Methode lässt sich nutzen, um das ausgewählte Element zu bekommen und als Parameter über den NavigationService weiterzugeben (ähnlich wie bei Webseiten-Parametern in der klassischen Web-Entwicklung). Der gewählte Parametername ist in meinem Beispiel item
. Von der MainPage.xaml
möchte ich Daten an eine andere Seite, namens FormulaPage.xaml
, übergeben.
Im Code schaut das wie folgt aus:
MainPage.xaml.cs
1 2 3 4 5 6 7 8 | private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (myListBox.SelectedItem != null) { NavigationService.Navigate(new Uri(String.Format("/FormulaPage.xaml?item={0}", myListBox.SelectedItem), UriKind.Relative)); myListBox.SelectedItem = null; } } |
Im Code-Behind der FormulaPage.xaml kann dann der übergebene Parameter in der Methode OnNavigatedTo
, die beim Aufrufen der Seite geladen wird, empfangen werden:
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; }; } |
Vielen Dank an Sebastian Jensen für Ausarbeitung dieses Beispiels. Hier geht es übrigens zu Sebastians Windows Phone-Apps im Marketplace.
Wie kann ich einen String weiter geben.
Geht das mit diesem Code.
private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (myListBox.SelectedItem != null)
{
NavigationService.Navigate(new Uri(String.Format(„/FormulaPage.xaml?item={0}“, myListBox.SelectedItem), UriKind.Relative));
myListBox.SelectedItem = null;
}
}
und wo muss das ganze stehen. Ganz oben unter Intialize oder was??
LG Elias