【问题标题】:WP7: Pass parameter to new page?WP7:将参数传递到新页面?
【发布时间】:2010-11-10 10:21:37
【问题描述】:

在 Windows Phone 7 Silverlight 应用程序中,我使用

调用新页面
NavigationService.Navigate(new Uri("/View/SecondPage.xaml", UriKind.Relative));

现在我想将参数传递给新页面。我知道可以使用以下方法传递一个简单的参数:

NavigationService.Navigate(new Uri("/View/TilgungsratePage.xaml?id=4711", UriKind.Relative));

并在新页面中使用

protected override void OnNavigatedTo(Microsoft.Phone.Navigation.PhoneNavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    String id = NavigationContext.QueryString["id"]; 
} 

对于简单的参数,这是可以的,但我如何传递一个列表?
复杂的对象?
除了简单的值之外还有什么?

【问题讨论】:

标签: windows-phone-7 parameter-passing


【解决方案1】:

在他的书"Programming Windows Phone 7"(第 6 章,第 3 节,“在页面之间共享数据”)中,Charles Petzold 推荐了 App 类(派生自 Application)中的属性。每个页面都可以通过Application.Current 访问它。同样有趣的是字典PhoneApplicationService.Current.State。它对墓碑很有用。整章读起来可能很有趣。

【讨论】:

【解决方案2】:

您还应该查看 MVVM 模式和信使类。

以下是一些参考资料:

MVVM Overview

MVVM Foundation Messenger

Good SO question on the messenger from MVVM Light

MVVM Light Blog

【讨论】:

    【解决方案3】:

    看看我是如何在 PhoneCore Framework 中实现导航的:A framework for building of WP7 application。不久,我在 WP7 导航之上构建了我的导航服务。它使用自定义页面映射并允许将自定义参数自动传递给视图模型。

    【讨论】:

      【解决方案4】:

      使用全局变量,为 GlobalVariables 创建一个新类:

      public static class GlobalVariables
      {
         public static string my_string = "";
         public static int my_int = -1;
      }
      

      然后就可以访问不同页面的全局变量类了:

      GlobalVariables.variable_name;
      

      【讨论】:

        【解决方案5】:

        您应该将对象保存到 IsolatedStorage。

        只需使用 Json.net 库对其进行序列化并将字符串保存到 IsolatedStorage。在下一页上,从 IsolatedStorage 中获取字符串,并使用 json.net 库将其转换回您想要的对象!

        【讨论】:

        • 我认为这只是为了在视图之间传递而过大。将数据放入 App 对象会更好。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多