Passing a string between pages in Windows Phone 8

北城余情 提交于 2019-11-29 02:18:34

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 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();  
}

http://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&referringTitle=Documentation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!