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"];
If you are using MVVM architecture,then you can pass string after registering using Messenger. Create a model class (say PageMessage) with a string(say message) variable. You want to pass string from homepage.xaml to newpage.xaml,then in homepage.xaml just send the message like this
Messenger.Default.Send(new PageMessage{message="Hello World"});
In the newpage.xaml,u should register the messenger like this,
Messenger.Default.Register<PageMessage>(this, (action) => ReceiveMessage(action));
private object ReceiveMessage(PageMessage action)
{
string receivedMessage=action.message;
return null;
}
Like this you can pass anything even navigation in MVVM architecture.
Hy,
another solution and to create a static class with one or more properties of type string depending on what you need, it enhances the way that it is available where you need.
Take a look at Caliburn.micro. It is really simple to set up and lets you pass parameters through views in a strongly typed manner, like this:
public void GotoPageTwo() {
navigationService.UriFor<PivotPageViewModel>()
.WithParam(x => x.NumberOfTabs, 5)
.Navigate();
}
来源:https://stackoverflow.com/questions/20223924/passing-a-string-between-pages-in-windows-phone-8