在WP8应用程序中的页面之间传递数据

时间:2014-04-03 00:37:16

标签: c# xaml windows-phone-8

我正在构建一个简单的Sports Tracker应用程序。我想在第1页开始DispatcherTimerGeoCoordinateWatcher,在第2页我想要一张地图视图。我正在寻找如何在页面之间传递计时器和观察者价值的最佳实践,因此我可以在地图上显示更新的信息。

我已经看到过将其保存到XML或IsoStorage的建议。这个问题的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:3)

您可以直接在页面之间传递字符串:

NavigationService.Navigate(new Uri("/destinationPage.xaml?dataKey="+dataValue.ToString()));

如果你想传递一个物体,首先击中的是:

NavigationService.Navigate(new Uri("/destinationPage.xaml?dataKey="+dataObject.ToString()));

问题出现了:
1)您需要在目标页面中反序列化您的对象。或者更糟糕的是,
2)内存问题。假设您需要传递图像(以41百万像素拍摄)并且不允许使用这么多内存:
所以这是另一个解决方案:

PhoneApplicationService.Current.State["yourparam"] = param;

然后您导航到目标页面,您可以访问您的对象:

var k = PhoneApplicationService.Current.State["yourparam"];

注意:这件事会将您的对象写入隔离的存储中。所以可能有点慢。
第三种选择:
使用静态类在页面之间保存dataValue。像:

static class Transporter
{
    public static object container;
}

现在在您的源页面中,您可以写下:

Transporter.container = MyGeoCoordinateWatcherObj;

您可以在目标网页中访问此内容。 (这里仍然是记忆的问题,但在你的情况下你可以安全地使用它。)
注意:有时microsoft建议使用mvvm模式传递对象。