如何从MainPage.xaml向另一个页面发送对象列表

时间:2013-10-20 15:50:58

标签: c# xaml windows-phone-7

导航到另一个页面时,如何将我的对象列表提供给另一个页面。

例如在我的mainpage.xaml

var data2 = from query in document.Descendants("weather")
           select new Forecast
           {
                date = (string)query.Element("date"),
                tempMaxC = (string)query.Element("tempMaxC"),
                tempMinC = (string)query.Element("tempMinC"),
                weatherIconUrl = (string)query.Element("weatherIconUrl"),
            };

forecasts = data2.ToList<Forecast>();
....
NavigationService.Navigate(new Uri("/WeatherInfoPage.xaml", UriKind.Relative));

然后在我的其他课程中,我想让它可用,以便我可以像这样使用它

private void AddPageItem(List<Forecast> forecasts)
{
    ..
}

4 个答案:

答案 0 :(得分:4)

这可能会对你有所帮助

//使用PhoneApplicationService.Current.State存储列表//

PhoneApplicationService.Current.State [“yourparam”] = lstpro.SelectedItems;  NavigationService.Navigate(new Uri(“/ res.xaml”,UriKind.Relative))

在第二页

私有IList iList1;

//在onNavigatedTo事件中,将存储的列表分配给变量//

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

{
     var i= PhoneApplicationService.Current.State["yourparam"];

     //convert object to list//
     iList1 = (IList) i ; 
     lstpro.ItemsSource = iList1;

}

答案 1 :(得分:1)

您可以使用放在App.xaml.cs中的全局变量:

//In App.xaml.cs
public static List<Forecast> SelectedForecasts = null;

该变量将在整个应用程序中可用。

答案 2 :(得分:1)

通常我使用一个用Singleton模式实现的附加类。在这个类中,我存储了需要在页面之间交换的每个数据。基本上它与Jon提到的方法相同,但我喜欢让我的App.xaml.cs保持干净。因此,您可以从应用程序的任何位置访问您的数据。

答案 3 :(得分:0)

有几种方法可以实现这一目标,但它们都不是真正优雅的。主要问题是处理墓碑场景:要完全恢复,即使应用程序刚刚被重新激活(以及之前导航中的所有先前状态已被删除,您的页面也必须能够检索其输入列表...)< / p>

  • 您可以使用自己的自定义格式序列化列表,并将其添加到Uri的末尾。缺点是你必须自己解析和反序列化Uri(也许这种方式对于简单和少量的数据看起来更自然,例如id)。

导航到下一页:

NavigationService.Navigate(new Uri("/WeatherInfoPage.xaml?data1;data2;serializeddata", UriKind.Relative));

要在下一页中检索数据,您必须从当前的Uri解析并反序列化它:

 Uri currentUri = ((App)Application.Current).RootFrame.CurrentSource;
  • 您还可以将列表存储到AppSettingsPhoneApplicationService.Current.State中的专用变量中,然后在新页面中导航和检索它。 Perharps创建一个专门的类来完成这项工作可能会很有趣。它可以是一个集中的位置来推送和检索参数,确保参数唯一性,管理参数寿命等等......它也可以应用于第一个提案。

  • 最后,如果您的列表在某处(文件,嵌入式数据库)持久化,您只需将ID传递到下一页(使用以前的提案),并通过从持久化源查询它来检索相应的列表。

在这两种情况下,您都可以将列表传递到下一页并处理墓碑场景。