导航到另一个页面时,如何将我的对象列表提供给另一个页面。
例如在我的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)
{
..
}
答案 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>
导航到下一页:
NavigationService.Navigate(new Uri("/WeatherInfoPage.xaml?data1;data2;serializeddata", UriKind.Relative));
要在下一页中检索数据,您必须从当前的Uri解析并反序列化它:
Uri currentUri = ((App)Application.Current).RootFrame.CurrentSource;
您还可以将列表存储到AppSettings或PhoneApplicationService.Current.State中的专用变量中,然后在新页面中导航和检索它。 Perharps创建一个专门的类来完成这项工作可能会很有趣。它可以是一个集中的位置来推送和检索参数,确保参数唯一性,管理参数寿命等等......它也可以应用于第一个提案。
最后,如果您的列表在某处(文件,嵌入式数据库)持久化,您只需将ID传递到下一页(使用以前的提案),并通过从持久化源查询它来检索相应的列表。
在这两种情况下,您都可以将列表传递到下一页并处理墓碑场景。