wake-up-neo.com

Wie übergebe ich Werte (Parameter) zwischen XAML-Seiten?

Ähnliche Fragen wurden bereits gestellt, aber diese Frage zielt darauf ab, mehr Optionen und die Fähigkeit zum Übergeben komplexer Objekte zu untersuchen.

Die Frage ist, wie man Parameter übergibt, aber es muss wirklich in drei Teile zerlegt werden.

  1. Wie übergeben Sie beim Navigieren zwischen Seiten in einer XAML-Anwendung Parameter?
  2. Was ist der Unterschied zwischen der Verwendung der Uri-Navigation und der manuellen Navigation?
  3. Wie können Objekte (nicht nur Zeichenfolgen) mit der Uri-Navigation übergeben werden?

Beispiel einer Uri-Navigation

page.NavigationService.Navigate(new Uri("/Views/Page.xaml", UriKind.Relative));

Beispiel für manuelle Navigation

page.NavigationService.Navigate(new Page());

Die Antwort auf diese Frage gilt für WP7, Silverlight, WPF und Windows 8.

Hinweis: Es gibt einen Unterschied zwischen Silverlight und Windows8

  • Windows Phone: Seiten werden mit einem Uri navigiert und Daten als Abfragezeichenfolge oder Instanz übergeben
  • Windows 8 : Seiten werden durch Übergeben des Typs und der Parameter als Objekte angesteuert
37
Daniel Little

Methoden zur Übergabe von Parametern

1. Verwenden der Abfragezeichenfolge

Sie können Parameter durch die Abfragezeichenfolge übergeben. Mit dieser Methode müssen Sie Ihre Daten in Zeichenfolgen konvertieren und diese mit der URL codieren. Sie sollten dies nur verwenden, um einfache Daten zu übergeben.

Navigationsseite:

page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative));

Zielseite:

string parameter = string.Empty;
if (NavigationContext.QueryString.TryGetValue("parameter", out parameter)) {
    this.label.Text = parameter;
}

2. NavigationEventArgs verwenden

Navigationsseite:

page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative));

// and ..

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    // NavigationEventArgs returns destination page
    Page destinationPage = e.Content as Page;
    if (destinationPage != null) {

        // Change property of destination page
        destinationPage.PublicProperty = "String or object..";
    }
}

Zielseite:

// Just use the value of "PublicProperty"..

3. Manuelle Navigation verwenden

Navigationsseite:

page.NavigationService.Navigate(new Page("passing a string to the constructor"));

Zielseite:

public Page(string value) {
    // Use the value in the constructor...
}

Unterschied zwischen Uri und manueller Navigation

Ich denke, der Hauptunterschied ist hier der Anwendungslebenszyklus. Manuell erstellte Seiten werden aus Navigationsgründen gespeichert. Lesen Sie mehr darüber hier .

Komplexe Objekte übergeben

Sie können Methode eins oder zwei verwenden, um komplexe Objekte zu übergeben (empfohlen). Sie können der Klasse Application auch benutzerdefinierte Eigenschaften hinzufügen oder Daten in Application.Current.Properties Speichern.

86
Daniel Little