WP7 Передача XML-данных между страницами - PullRequest
0 голосов
/ 28 октября 2011

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

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=2&subject=" + subjectid, UriKind.Relative));
}

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

но я пока не могу обернуть его вокруг.

некоторые указания были бы действительно хорошими.Благодарю.Я только начинаю на WP7.

ура.

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Исходя из того, что вы реализовали, самый простой способ - извлечь контекст данных из объекта текстового блока и передать его на следующую страницу. Добавляя к обработчику вы написали выше:

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));
      }
    }

Однако я также хочу отметить, что это может быть не лучшим решением. Использование обработчиков событий для обработки всех пользовательских взаимодействий может затруднить поддержание вашего кода в сверхурочное время, и действительно сложно написать тестовые случаи для обработчиков событий. Вы можете рассмотреть возможность использования инфраструктур 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

0 голосов
/ 29 октября 2011

решаемая.Спасибо Лео Це за указание.Я искал больше, и я нашел это - 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=2&subjectid=" + subjectid, UriKind.Relative));
    } 
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...