0

XML ファイルから WPF DataGrid にデータをバインドする必要があるユース ケースがあります。この例は、最終的なコードで何をするかを示すために用意しました。

これは Books.xml です。


 <?xml version="1.0" encoding="utf-8" ?>
 <library>
   <books>
  <book id="1" name="The First Book" author="First Author">
    First Book Content
  </book>
  <book id="2" name="The Second Book" author="Second Author">
    Second Book Content
  </book>
   </books>
 </library>

そして、ここに DataGrid コントロールをバインドする方法を示します。最初の XAML:


<Window x:Class="LinqToXmlBinding.Window1"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
 Title="Window1" Height="300" Width="400">
 <Grid>
  <Grid.ColumnDefinitions>
   <ColumnDefinition Width="268*" />
   <ColumnDefinition Width="110*" />
  </Grid.ColumnDefinitions>
  <toolkit:DataGrid Name="xmlBoundDataGrid" Margin="1" ItemsSource="{Binding Path=Elements[book]}">
   <toolkit:DataGrid.Columns>
    <toolkit:DataGridTextColumn Header="Book ID" Binding="{Binding Path=Attribute[id].Value}"/>
    <toolkit:DataGridTextColumn Header="Book Name" Binding="{Binding Path=Attribute[name].Value}"/>
    <toolkit:DataGridTextColumn Header="Content" Binding="{Binding Path=Value}"/>
   </toolkit:DataGrid.Columns>
  </toolkit:DataGrid>
  <StackPanel Name="myStackPanel" Grid.Column="1">
   <Button Name="bindToXmlButton" Click="bindToXmlButton_Click">Bind To XML</Button>
  </StackPanel>
 </Grid>
</Window>

次に、C# コード:


const string _xmlFilePath = "..//..//Books.xml";
private void bindToXmlButton_Click(object sender, RoutedEventArgs e)
{
     XElement books = XElement.Load(_xmlFilePath).Element(myNameSpace + "books");
     xmlBoundDataGrid.DataContext = books;
}

ここで、Books.XML のルート要素で XML 名前空間をhttp://my.namespace.com/books;と定義したとします。その名前空間をプログラムで次のように取得できることはわかっています。


XNamespace myNameSpace = XElement.Load(_xmlFilePath).Attribute("xmlns").Value;

しかし、"book" 要素にアクセスするために、XAML でこの名前空間を取得するにはどうすればよいでしょうか? そして、その点でのベストプラクティスは何ですか?

どうもありがとうございました。

4

1 に答える 1

0

間違っていたらすみませんが、

  • xmlns="..." のようなデフォルトの名前空間から要素にアクセスする必要がある場合は、Path=Attribute[name].Value のような通常の構文を使用する必要があります。

  • xmlns:ns="..." のようなプレフィックス付きの名前空間を持つ XML と のようなこの名前空間内の要素がある場合は、Path=Elements["ns:book"] を使用してみてください。

お役に立てれば。

于 2010-06-23T21:59:37.653 に答える