Passing a string between pages in Windows Phone 8

前端 未结 5 1872
自闭症患者
自闭症患者 2020-12-16 04:53

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

相关标签:
5条回答
  • 2020-12-16 05:03

    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

    0 讨论(0)
  • 2020-12-16 05:06

    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.

    0 讨论(0)
  • 2020-12-16 05:10

    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.

    0 讨论(0)
  • 2020-12-16 05:17

    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

    0 讨论(0)
  • 2020-12-16 05:23

    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);
    
    0 讨论(0)
提交回复
热议问题