2013-11-26 2 views
8

Ich muss eine einfache Zeichenfolge zwischen zwei Seiten in Windows Phone 8 übergeben. Ich habe gesucht und versucht, den besten Weg zu finden - aber diejenigen, die ich versuchte, wandte out, um nicht so zu funktionieren, wie sie sollten - also frage ich Sie: Was ist der beste Weg, um eine einfache Zeichenfolge zwischen zwei Seiten in Windows Phone 8 übergeben. Dies ist die Methode, die ich verwende, um auf die andere Seite zu navigieren:Übergeben einer Zeichenfolge zwischen Seiten in Windows Phone 8

NavigationService.Navigate(new Uri("/newpage.xaml", Urikind.Relative)); 
+1

http://developer.nokia.com/Community/Wiki/Passing_parameters_while_navigating_between_pages_on_Windows_Phone – YK1

+0

@Erik vergessen Sie bitte nicht zu markieren, welche Antwort für Sie am besten funktioniert, damit zukünftige Menschen diese nützlich finden können. –

Antwort

19

Für ein String-Variable ist es am einfachsten, ein Abfrage-String-Parameter zu verwenden:

NavigationService.Navigate(new Uri("/newpage.xaml?key=value", Urikind.Relative)); 

es auf dem Teer Pick-up erhalten Seite mit NavigationContext.QueryString:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if (NavigationContext.QueryString.ContainsKey("key")) 
    { 
     string val = NavigationContext.QueryString["key"]; 
     // etc ... 
    } 
} 

Hinweis: wenn die Zeichenfolge nur alphanumerische Zeichen enthält, dann über die funktionieren ohne Anpassungen. Wenn Ihre Zeichenfolge jedoch URL-reservierte Zeichen enthält (z. B. &, ?), müssen Sie sie URL-codieren. Verwenden Sie dazu die Hilfsmethoden Uri.EscapeDataString und Uri.UnescapeDataString.

zu entkommen:

string encodedValue = Uri.EscapeDataString("R&R"); 
NavigationService.Navigate(new Uri("/newpage.xaml?key=" + encodedValue, Urikind.Relative)); 

Um unescape:

string encodedValue = NavigationContext.QueryString["key"]; 
string val = Uri.UnescapeDataString(encodedValue); 
+1

Ich bekomme dann eine ArgumentNullException – Erik

+0

Ich werde versuchen, diesen Code so schnell wie möglich zu starten - gerade lief meine App in ein Fehlverhalten, dass ich beheben muss, so dass es stabil ist, bevor ich wieder Urcode testen – Erik

5

ich, dass für einfache Daten @McGarnagle zu sagen haben, ist wahrscheinlich eine bessere Lösung.

Das heißt, das ist auch eine sehr schnelle und schmutzige Art, dies zu tun. Diese Methode kann auch komplexe Objekte aufnehmen.

ich PhoneApplicationService.State mag mit der eine ist Dictionary<String,Object>

PhoneApplicationService.State.add("KeyName",YourObject); 

Dann in Seite zwei, die Sie tun dies

var yourObject = PhoneApplicationService.State["KeyName"]; 

MSDN Documentation

+0

Vielen Dank für beide Antworten, ich kann es jetzt nicht implementieren - meine App hat sich dazu entschieden, sich seltsam zu verhalten, aber ich werde es so schnell wie möglich versuchen :) – Erik

+0

Und ich denke, diese Methode ist besser, wenn Sie möchten, dass Ihre Daten erhalten bleiben. – Romasz

+0

@Romasz Ja, du bist richtig. Dies ist eine sehr einfache Möglichkeit, Daten zu erhalten. Es macht die Übergabe komplexer benutzerdefinierter Objekte zwischen XAML-Seiten sehr einfach. Anstatt sie zu serialisieren oder gar zu verschlingen, zerlegen Sie sie in ein String-Format und übergeben sie über die URL –

2

Wenn Sie MVVM Architektur verwenden, dann können Sie Zeichenfolge nach der Registrierung übergeben Verwendung Bote. Erstellen Sie eine Modellklasse (z. B. PageMessage) mit einer Zeichenfolge (z. B. Nachricht) Variable. Sie mögen Zeichenfolge, um von homepage.xaml newpage.xaml, dann in homepage.xaml nur die Nachricht senden wie diese

Messenger.Default.Send(new PageMessage{message="Hello World"}); 

Im newpage.xaml, u die Boten wie dieses Register soll,

Messenger.Default.Register<PageMessage>(this, (action) => ReceiveMessage(action)); 

private object ReceiveMessage(PageMessage action) 
{ 
    string receivedMessage=action.message; 
    return null; 
} 

So können Sie alles sogar Navigation in MVVM-Architektur übergeben.

2

Hy,

eine andere Lösung und eine statische Klasse mit einem oder mehreren Eigenschaften vom Typ String je nach erstellen, was Sie brauchen, erhöht es die Art und Weise, dass es verfügbar ist, wo Sie brauchen.