如何在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&param2= ,而不是导航到secondpage.xaml 。 您可以通过覆盖onNavigatedTo函数来获取导航参数,就像检查启动应用程序的参数一样(但不是,可能在开始页面上)。 请注意,这可能是特定于Silverlight的; 我没有尝试使用非Silverlight应用程序。
  • 要通常在应用程序周围传递数据,您可以使用任意数量的全局对象。 您可以将公共字段添加到您从其他类读取和写入的App类(在App.xaml.cs定义)。 您可以在任何类中添加静态公共字段,并从中进行读写。 Globals被认为是一个糟糕的设计,但是将它们粘贴在应该访问它们的特定类上是合理的。 请注意,有时可能会在不同的线程上处理不同的页面。
  • 使用持久存储。 您可以写入隔离的存储设置字典,或者只写出一个文件并让其他页面查找它。 对于你想要实现的目标而言,这可能有点过头了,但是如果你想让应用程序的一部分记录来自摄像机的大量video,而另一部分处理它,那将是一个可行的解决方案。