WP7 передает XML-данные между страницами

#c# #xaml #windows-phone-7

#c# #xaml #Windows-phone-7

Вопрос:

просто нужно некоторое руководство. давайте сначала опубликуем коды:

XAML:

 <ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Name="subjectBlock" Text="{Binding SubjectName}" FontSize="26" TextWrapping="Wrap" Foreground="{StaticResource PhoneAccentBrush}" Tap="subjectBlock_Tap" />
            <TextBlock Text="{Binding LecturerName}" FontSize="24" IsHitTestVisible="False" />
            <TextBlock Text=" "/>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>
  

Код на C #:

 XDocument xmlCourse = XDocument.Load(xmlFile);

var xmlData = from subject in xmlCourse.Descendants("subject")
              select new Subject
              {
                  SubjectID    = subject.Element("subjectID").Value,
                  SubjectName  = subject.Element("subjectName").Value,
                  LecturerName = subject.Element("lecturerName").Value
              };

subjectList.ItemsSource = xmlData;

xmlFile.Close();
  

 private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{            
    NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2amp;subject="   subjectid, UriKind.Relative));
}
  

я пытаюсь передать SubjectID на другую страницу через событие tapped. я извлекаю данные через xml, у каждого отдельного субъекта есть идентификатор, и мне интересно, есть ли способ передать этот идентификатор напрямую / косвенно?

но, похоже, я пока не могу разобраться в этом.

некоторые рекомендации были бы действительно хороши. Спасибо. я сам только начинаю работать с WP7.

Приветствия.

Комментарии:

1. Проверьте это innovativesingapore.com/2010/09 /…

Ответ №1:

Исходя из того, что вы реализовали до сих пор, самый простой способ — извлечь контекст данных из объекта 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=2amp;subject="   subjectid, UriKind.Relative));
      }
    }
  

Однако я также хочу отметить, что это может быть не лучшим решением. Использование обработчиков событий для обработки всех взаимодействий с пользователем может затруднить сверхурочное обслуживание вашего кода, а писать тестовые примеры для обработчиков событий действительно сложно. Вы можете рассмотреть возможность использования MVVM-фреймворков, таких как MVVMLight, для улучшения тестируемости вашего кода. Платформа поставляется с командной системой, которая отделяет представление (XAML) от кода (.cs). Это избавит вас от многих головных болей в будущем =)

Ссылка на проект MVVMLight: http://www.galasoft.ch/mvvm /

Сообщение о командной структуре: http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx

Комментарии:

1. по какой-то причине отправитель. DataContext не читается. я думаю, что это проблема с моим XAML, правильно?

2. Извините, что это проблема с кодом. Обновлен код, теперь он должен работать

Ответ №2:

РЕШЕНО. Спасибо Лео Це за то, что дал мне указания. Я искал больше, и я нашел это — http://mobile.tutsplus.com/tutorials/windows/windows-phone-7-silverlight-tutorial /

Поскольку я использовал ListBox, и я просто хотел передать SubjectID. Использование 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=2amp;subjectid="   subjectid, UriKind.Relative));
    } 
}
  

Все еще изучаю WP7. До сих пор это был взрыв!

Комментарии:

1. Поздравляю с решением. Обязательно отметьте свой ответ как «принятый», чтобы другие могли извлечь уроки из вашего успеха. Приветствия ~