2

导航到另一个页面时,如何使我的对象列表可用于另一个页面。

例如在我的 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

4 回答 4

4

这可能会帮助你

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

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

并且在第二页

私人 IList iList1;

//在onNavigatedTo事件中将存储的列表赋值给变量//

受保护的覆盖无效 OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

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

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

}
于 2013-10-20T16:24:48.730 回答
1

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

于 2013-10-20T22:03:00.243 回答
1

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

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

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

于 2013-10-20T16:39:40.963 回答
0

有几种方法可以做到这一点,但没有一个是真正优雅的。主要问题是处理墓碑场景:要完全恢复,您的页面必须能够检索其输入列表,即使应用程序刚刚重新激活(并且来自先前导航的所有先前状态都已删除......)

  • 您可以使用自己的自定义格式序列化列表并将其添加到 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 传递到下一页(使用以前的建议)并通过从持久源中查询相应列表来检索它。

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

于 2013-10-20T16:51:00.380 回答