WP7 - c # - silverlight - Передача данных XML между страницами - PullRequest
3 голосов
/ 17 апреля 2011

Что ж, после недели просмотра и чтения уроков я все еще не мог передать данные XML между страницами.У меня было нулевое знание c # в начале, я могу понять немного больше, знаю.

Буду признателен, если вы мне поможете или хотя бы подскажете, с чего начать.Хорошо, вот что я хочу сделать, и я не мог

Например;У меня есть данные XML, как это;

<document>
    <car id="01">
        <manufacturer>Ford</manufacturer>
        <model>Mustang</model>
        <year>1965</year>
        <details>The Ford Mustang of 1965 was first unveiled bla bla for example....</details>
    </car>
    <car id="02">
        <manufacturer>Chevrolet</manufacturer>
        <model>Nova</model>
        <year>1967</year>
        <details>The Chevrolet Nova of 1967 was bla bla for example....</details>
    </car>
    <car id="03">.....
</document>

Я хочу показать производителя и модель внутри списка mainpage.xaml (работает нормально)

TextBlock Text="{Binding manufacturer}"
TextBlock Text="{Binding model}"

При нажатии на модельимя, которое я хочу показать год и детали модели на другой странице (например, details.xaml)

Мне удалось передать простой текст с помощью метода ниже, но я не смог передать привязки, и он не работал длямне.Это просто список деталей и год выпуска для всех автомобилей, а не для конкретного, который я выбрал на главной странице.

this.NavigationService.Navigate(
new Uri("/details.xaml?......

Заранее спасибо.Извините, если я побеспокоил вас.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2011

Вместо того, чтобы передавать длинную строку данных XML между страницами, я просто передаю идентификатор автомобиля.Поскольку вы привязываете данные к ListBox на mainpage.xaml, я предполагаю, что у вас есть класс, подобный следующему:

public Class Car {
  public string manufacturer;
  public string model;
  public unsigned int id;

  // ...
}

Считайте файл XML при запуске и создайте ObservableCollection из Car объекты, которые связаны с ListBox.Затем в обработчике жестов Tap для ListBoxItem выполните следующее:

private void OnListBoxItemTapped( object sender, GestureEventArgs e )
{
  var car = sender.DataContext as Car;

  if( car != null ) {
    // Navigate to page that will display the car details
    NavigationService.Navigate(
          new Uri( String.Format( "/detailspage.xaml?id={0}",
            Uri.EscapeDataString( car.id ) ), UriKind.Relative ) );
  }
}

Затем, на странице сведений OnNavigatedTo, просто найдите правильный автомобиль, используя id, и привяжитеэтот объект к странице DataContext.

Обратите внимание, что EscapeDataString не требуется, если ваши идентификаторы всегда числовые.Если вы действительно хотите передать все данные XML как есть, вы также можете сделать это, заменив идентификатор на данные строки XML.

1 голос
/ 17 апреля 2011

Почему бы вам просто не проанализировать XML ... и отправить все это с помощью mvvm ...

у вас будет что-то подобное на странице сведений:

 Messenger.Default.Register<YourClass>(this, "Display", s => SomeFucToDisplay(s));

и вы отправляете его с главной страницы просто:

  Messenger.Default.Send(YourClass, "Display");

Это ссылка, где вы можете найти больше http://www.galasoft.ch/mvvm/

1 голос
/ 17 апреля 2011

Вы можете передавать только простые строки в навигационном URL-адресе, поэтому в вашем случае вы включаете "? Id = xx" в вашу навигацию по деталям. Ваша страница сведений может запросить автомобиль с указанным идентификатором из ваших данных.

...