7

さまざまな解決策を探して試しましたが、これまでのところ、問題を解決するものはありません。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>

私の 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>

それをバックアップする C# は、(Web サービスからダウンロードした) 新しい XDocument を (INotifyPropertyChanged を実装する) TrackList プロパティに割り当てるだけです。それ以上の処理は行われません。

以前に XLinq を使用してクエリ結果にバインドしようとしましたが、どちらも機能しませんでした (同じ問題)。そのため、XPath アプローチを試して、潜在的にバグのある Linq ステートメントを記述しないようにし、問題を見つけようとしました。 .

DataGrid を正しく表示する方法についてのアイデアが不足しています。これがどのように機能するかについての私の理解は明らかに不足しているため、提供された助けに大いに感謝します.

編集:生のXMLを自分でダウンロードしているため、入力データ形式にある程度の柔軟性があることに注意してください。いくつかの提案を試して、何ができるか見てみます。

4

2 に答える 2

8

私はXLinqを使用し、XDocumentの代わりにXElementを使用して正常に動作しました。

XElement TrackList = XElement.Load("List.xml");
LibraryView.DataContext = TrackList;

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>
于 2010-02-05T10:36:50.470 に答える