WP7 - c# - silverlight - 在页面之间传递XML数据

时间:2011-04-17 12:30:57

标签: c# xml silverlight data-binding windows-phone-7

好吧,经过一周的观看和阅读教程后,我仍然无法在页面之间传递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}"

单击模型名称时,我想在另一页面中显示模型的年份和详细信息(例如,详情为.xp)

我能够通过下面的方法传递简单的文本,但我无法传递绑定,它对我没有用。它只列出了我在主页中选择的所有汽车的详细信息和年份。

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

提前谢谢你。对不起,如果我打扰你。

3 个答案:

答案 0 :(得分:2)

不是在页面之间传递一长串XML数据,而是只传递汽车的ID。由于你是在mainpage.xaml上绑定到ListBox的数据,我假设你有一个类似于以下的类:

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

  // ...
}

在启动时读取XML文件并创建绑定到ObservableCollection的{​​{1}}个Car个对象。然后,在ListBox的{​​{1}}手势处理程序中执行以下操作:

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始终为数字,则无需id。如果您确实想要按原样传递所有XML数据,那么您也可以通过将XML替换为XML字符串数据来实现。

答案 1 :(得分:1)

您只能在导航的网址中传递简单字符串,因此在您的情况下,您在详细信息导航中包含“?id = xx”。您的详细信息页面可以从您的数据中请求具有指定ID的汽车。

答案 2 :(得分:1)

为什么不解析xml ...并使用mvvm发送整个内容...

您将在详细信息页面中看到类似内容:

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

您只需通过以下方式从主页发送:

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

这是您可以找到更多http://www.galasoft.ch/mvvm/

的链接