如何正确地将xml绑定到WPF DataGrid?

Ian*_*ham 7 data-binding wpf wpfdatagrid

我已经寻找并尝试了各种解决方案,但到目前为止,它们都没有解决我的问题.我在Visual Studio 2010/.NET4中使用WPF内置的DataGrid来显示存储为XDocument的XML文档中的数据.

我的代码都运行良好,我已经验证了XDocument存在且正确.但是,DataGrid不显示任何数据.

XML看起来像这样(为简洁起见,简化):

<data>
  <track>
    <id>211</id>
    <name>Track Name</name>
    <duration>156</duration>
    <artist_id>13</artist_id>
    <artist_name>Artist Name</artist_name>
    <album_id>29</album_id>
    <album_name>Album Name</album_name>
  </track>
...
</data>
Run Code Online (Sandbox Code Playgroud)

我的XAML看起来像这样:

<DataGrid x:Name="LibraryView" Grid.Row="1"
              DataContext="{Binding Path=TrackList}" ItemsSource="{Binding XPath=/data/track}">
    <DataGridTextColumn Header="Title" Binding="{Binding XPath=name}"/>
    <DataGridTextColumn Header="Artist" Binding="{Binding XPath=artist_name}"/>
    <DataGridTextColumn Header="Album" Binding="{Binding XPath=album_name}"/>
    <DataGridTextColumn Header="Length" Binding="{Binding XPath=duration}"/>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

备份它的C#只是将一个新的XDocument(从Web服务下载)分配给TrackList属性(实现INotifyPropertyChanged).没有进一步处理.

我以前曾尝试使用XLinq来绑定查询结果,这也不起作用(同样的问题),所以我想我会尝试使用XPath方法来避免写一个潜在的错误Linq语句,并尝试找到问题.

我没有关于如何正确显示DataGrid的想法.我对这应该如何工作的理解显然是缺乏的,所以我非常感谢所提供的任何帮助.

编辑:值得注意的是,我对输入数据格式有一些灵活性,因为我自己下载原始XML.我会尝试一些建议,看看我能开展什么工作.

Nat*_*txo 9

我使用XLinq并且工作正常,使用XElement而不是XDocument:

XElement TrackList = XElement.Load("List.xml");
LibraryView.DataContext = TrackList;
Run Code Online (Sandbox Code Playgroud)

XAML:

<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[track]}">
    <DataGrid.Columns>
         <DataGridTextColumn Header="Artist" Binding="{Binding Path=Element[artist_name].Value}"/>
         <DataGridTextColumn Header="Album" Binding="{Binding Path=Element[album_name].Value}"/>
         <DataGridTextColumn Header="Length" Binding="{Binding Path=Element[duration].Value}"/>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)