在Windows Phone 8.1中如何在页面之间传递数据。

9
我有一个和页面间数据传递相同的问题,但只针对Windows Phone 8.1(而不是Windows Phone 7)。以下是问题:
我正在寻找如何在页面之间传递数据的最佳实践。
在页面A中,我有一个按钮可以触发页面B。 在页面B上,我有6个文本框让用户输入信息。当用户完成后,点击一个按钮将他们带回页面A。
我想把那些数据传回页面A。
我看到了以下建议:
构建XML文档并保存到隔离存储 使用App类将信息存储在属性中 像查询字符串一样传递它 我正在寻找最佳实践。是否有Microsoft推荐的方法或通常被接受为最佳方式的方法?
谢谢
2个回答

16

在 WP8.1 运行时 - 对于 SilverlightWP8.0 中使用的方法 仍应该起作用 - 你有几个选择:

  • 第一个也可能是最简单的方法是使用带参数导航 - 如果它是可序列化的类型,则不必将其转换为 string

// let's assume that you have a simple class:
public class PassedData
{
   public string Name { get; set; }
   public int Value { get; set; }
}

// then you navigate like this:
Frame.Navigate(typeof(Page1), new PassedData { Name = "my name", Value = 10 });

// and in target Page you retrive the information:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    PassedData data = e.Parameter as PassedData;
}
  • 你可以使用一些 静态对象 来在应用程序中传递数据。

  • 最后,就像你提到的那样,你可以将数据保存在: LocalSettingsLocalStorageLocalCache 中 - 不过在这种情况下,你还需要将其序列化为 XAML、Json 或其他格式。
  • 请注意,你还必须处理应用程序挂起/恢复 - 因此,在应用程序被挂起时保存数据并在恢复时加载数据是合适的。你应该记住,在应用程序恢复时不会调用 OnNavigatedTo


    以上内容是关于正常导航(前进)的。如果你想要在上一个页面中填写一些数据,那么你有以下几个选择:

    • 传递一个处理程序到上一个页面,这样你就可以从当前页面访问公共变量/属性,
    • 使用静态变量/属性 - 可以是单例模式
    • 再次使用文件/设置

    请注意,再次提到的前两种方法存在一个缺点,即应用程序在挂起后可能会崩溃。在这里保存到文件可能更好,但需要进行更多工作和适当的处理。


    如果我们想要传递多个参数,那么哪种方法更好? - Kinjan Bhavsar
    这取决于你的参数类型、它们的重要性以及其他的实现方式。 - Romasz
    我想传递一个类的对象和一个来自其他类的字符串参数。 - Kinjan Bhavsar
    @KinjanBhavsar 这取决于你的类是否包含基本类型。尝试一下,选择最适合你的方法。不要忘记应用程序暂停甚至终止。 - Romasz

    0

    --首先创建一个类

    public class PassedData
    {
       public string email { get; set; }  
    }
    

    --然后您可以通过更改该值在页面之间导航

    Frame.Navigate(typeof(Frame2), new PassedData { email = emailtxt.Text });
    

    --然后在另一个页面中捕获传递的值

    var passedData = e.Parameter as PassedData;
    
    emailtxt.Text = passedData.email;
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接