【问题标题】:Passing Data from Page to Page for Windows Phone 8.1为 Windows Phone 8.1 在页面之间传递数据
【发布时间】:2014-09-16 18:25:40
【问题描述】:

我的问题与Passing data from page to page 完全相同,但仅限于 Windows Phone 8.1(与 Windows Phone 7 相对)。问题来了:

我正在寻找有关如何在页面之间传递数据的最佳实践。

在页面 A 中,我有一个触发页面 B 的按钮。 在页面 B 我有 6 个文本框,允许用户输入信息。当用户完成后,点击一个按钮将他们带回页面 A。

我想将该数据传递回页面 A。

我看到了以下建议:

构建 XML 文档并保存到独立存储 使用 App 类在属性中存储信息 像查询字符串一样传递它 我正在寻找最佳实践。有没有一种是 Microsoft 推荐的,或者是公认的最佳方法?

谢谢

【问题讨论】:

    标签: c# navigation save windows-phone-8.1


    【解决方案1】:

    在 WP8.1 运行时 - 对于 Silverlightthe methods used in WP8.0 仍然应该工作 - 你有几个选择:

    • 第一种可能也是最简单的方法是使用Navigate with parameter - 如果它是可序列化类型,则不必将其转换为 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 不会被调用。


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

    • 将处理程序传递给前一个页面,以便您可以从当前页面访问公共变量/属性,
    • 使用静态变量/属性 - 可能是单例
    • 再次使用文件/设置

    请注意,前两种方法也有一个缺点,即应用程序在暂停后可能会崩溃。在这里保存到文件可能会更好,认为需要更多的工作和适当的处理。

    【讨论】:

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

    --首先创建一个类

    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;
    

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多