【问题标题】:WP7 - c# - silverlight - Passing XML data between pagesWP7 - c# - silverlight - 在页面之间传递 XML 数据
【发布时间】:2011-04-17 12:30:56
【问题描述】:

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

提前谢谢你。打扰了,对不起。

【问题讨论】:

  • 您是否使用(了解)ViewModels (MVVM)?

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


【解决方案1】:

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

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

  // ...
}

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

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

请注意,如果您的 ID 始终为数字,则不需要 EscapeDataString。如果您真的想按原样传递所有 XML 数据,也可以通过将 ID 替换为 XML 字符串数据来实现。

【讨论】:

  • +1 但Dictionary&lt;int, Car&gt; 会比可观察的集合更好。
  • @AnthonyWJones:同意,如果汽车列表永远不会改变 ObservableCollection 是不必要的。此外,字典应该有助于高效搜索。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      相关资源
      最近更新 更多