如何在Windows Phone 8.1应用程序中的两个页面之间传递数据?
我有一个Windows Phone 8.1应用程序,我有两个页面显示数据。 第一页有一个列表视图,显示来自sqlite数据库的所有数据,当用户点击列表视图中的一个项目时,第二个页面打开一个列表视图,其中包含有关该数据库中该特定记录的更多详细信息。 我的问题是如何使用c#在Windows Phone 8.1中实现这一目标?
在Windows Phone 8.1中有两种方法可以做到:
void SelectionChanged(object sender, SelectionChangedEventArgs e) { var list= sender as Listview; var taped=list.SelectedItem as Model; //here you send your parameter to the second page Frame.Navigate(Typeof(SecondPage),taped); }
要么
public static Model taped; void SelectionChanged(object sender, SelectionChangedEventArgs e) { var list= sender as Listview; taped=list.SelectedItem as Model; }
在SecondPage中,您可以通过FirstPage.taped访问它;
在第一页上你应该写这样的东西:
Frame.Navigate(typeof(SecondPage), someData);
对于第二页,您应该重写OnNavigatedTo(NavigationEventArgs e)。 例如:
protected override void OnNavigatedTo( NavigationEventArgs e ) { MyData data = e.Parameter as MyData. }
几个选项:
- 要直接传递数据,可以将其作为查询字符串参数(如网页URL)放在URI中。 因此,例如,您可以导航到
secondpage.xaml?param1=abc123¶m2=
,而不是导航到secondpage.xaml
。 您可以通过覆盖onNavigatedTo
函数来获取导航参数,就像检查启动应用程序的参数一样(但不是,可能在开始页面上)。 请注意,这可能是特定于Silverlight的; 我没有尝试使用非Silverlight应用程序。 - 要通常在应用程序周围传递数据,您可以使用任意数量的全局对象。 您可以将公共字段添加到您从其他类读取和写入的
App
类(在App.xaml.cs
定义)。 您可以在任何类中添加静态公共字段,并从中进行读写。 Globals被认为是一个糟糕的设计,但是将它们粘贴在应该访问它们的特定类上是合理的。 请注意,有时可能会在不同的线程上处理不同的页面。 - 使用持久存储。 您可以写入隔离的存储设置字典,或者只写出一个文件并让其他页面查找它。 对于你想要实现的目标而言,这可能有点过头了,但是如果你想让应用程序的一部分记录来自摄像机的大量video,而另一部分处理它,那将是一个可行的解决方案。