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 t
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();
}
http://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&referringTitle=Documentation
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.
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.
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
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);