C# WP7在页面之间传递XML数据

C# WP7在页面之间传递XML数据,c#,xaml,windows-phone-7,C#,Xaml,Windows Phone 7,只是需要一些指导。让我先发布代码: XAML: 我试图通过点击事件将主题传递到另一个页面。我通过xml提取数据,每个主题都有一个ID,我想知道是否有直接/间接传递该ID的方法 但我似乎还不能完全理解它 一些指导真的很好。谢谢我自己刚开始学习WP7 干杯。根据到目前为止的实现,最简单的方法是从textblock对象检索数据上下文并将其传递到下一页。向上面编写的处理程序中添加: private void subjectBlock_Tap(object sender, System.Windows.

只是需要一些指导。让我先发布代码:

XAML:

我试图通过点击事件将主题传递到另一个页面。我通过xml提取数据,每个主题都有一个ID,我想知道是否有直接/间接传递该ID的方法

但我似乎还不能完全理解它

一些指导真的很好。谢谢我自己刚开始学习WP7


干杯。

根据到目前为止的实现,最简单的方法是从textblock对象检索数据上下文并将其传递到下一页。向上面编写的处理程序中添加:

private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
  var textblock = sender as TextBlock;
  if(null != textblock) {
      var subject = textblock.DataContext as Subject;
      if(null != subject) {
        string subjectid = subject.SubjectID;
        NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subject=" + subjectid, UriKind.Relative));
      }
    }
然而,我还想指出,这可能不是最好的解决办法。使用事件处理程序来处理所有用户交互可能会使您的代码很难超时维护,而且为事件处理程序编写测试用例也非常困难。您可以考虑使用像MVVMLight这样的MVVM框架来帮助提高代码的可验证性。该框架附带了一个命令系统,该系统将视图(XAML)与代码(.cs)解耦。这会让你在今后的道路上省去很多麻烦=)

链接到MVVMLight项目:


指挥框架上的帖子:

已解决。谢谢Leo Tse给我指点。我搜索了更多,发现了这个-

因为我使用的是一个列表框,我只想传递这个主题。将ListBox.SelectedItem用作对象效果很好。虽然我不确定这是不是骇客,但它似乎是正确的

private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{   
    var subject = subjectList.SelectedItem as Subject;
    if (null != subject) 
    {
        string subjectid = subject.SubjectID;
        NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subjectid=" + subjectid, UriKind.Relative));
    } 
}

仍在学习WP7。到目前为止它一直在爆炸

出于某些原因,请选中此项sender.DataContext未读取。我认为这是我的XAML的问题,对吗?很抱歉,这是代码的问题。更新了代码,现在应该可以工作了,恭喜解决方案。确保将你的答案标记为“已接受”,以便其他人可以从你的成功中学习。干杯~
private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{            
    NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subject=" + subjectid, UriKind.Relative));
}
private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
  var textblock = sender as TextBlock;
  if(null != textblock) {
      var subject = textblock.DataContext as Subject;
      if(null != subject) {
        string subjectid = subject.SubjectID;
        NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subject=" + subjectid, UriKind.Relative));
      }
    }
private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{   
    var subject = subjectList.SelectedItem as Subject;
    if (null != subject) 
    {
        string subjectid = subject.SubjectID;
        NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2&subjectid=" + subjectid, UriKind.Relative));
    } 
}