I need to pass a simple string between two pages in Windows Phone 8. I've been searching around, trying to find the best way of doing it - but the ones i tried turned out to not work as they should - so i ask you: What is the best way to pass a simple string between two pages in Windows Phone 8. This is the method I use to navigate to the other page:
NavigationService.Navigate(new Uri("/newpage.xaml", Urikind.Relative));
For a string variable, it's easiest to use a query string parameter:
NavigationService.Navigate(new Uri("/newpage.xaml?key=value", Urikind.Relative));
Pick it up on the target page using NavigationContext.QueryString
:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (NavigationContext.QueryString.ContainsKey("key"))
{
string val = NavigationContext.QueryString["key"];
// etc ...
}
}
Note: if your string contains only alphanumeric characters, then the above will work without modification. But, if your string might have URL-reserved characters (eg, &
, ?
), then you'll have to URL-encode them. Use the helper methods Uri.EscapeDataString
and Uri.UnescapeDataString
for this.
To escape:
string encodedValue = Uri.EscapeDataString("R&R");
NavigationService.Navigate(new Uri("/newpage.xaml?key=" + encodedValue, Urikind.Relative));
To unescape:
string encodedValue = NavigationContext.QueryString["key"];
string val = Uri.UnescapeDataString(encodedValue);
I have to say that for simple data @McGarnagle is probably a better solution.
That said, this is also an extreamly fast and dirty way to do this. This method can also take complex objects as well.
I like using PhoneApplicationService.State
which is a Dictionary<String,Object>
PhoneApplicationService.State.add("KeyName",YourObject);
Then in page two you do this
var yourObject = PhoneApplicationService.State["KeyName"];
MSDN Documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With