WPF DataBind DataGrid到XML

时间:2014-04-01 22:35:44

标签: c# xml wpf xaml datagrid

在让DataGrid填充XML时出现问题。

以下是XML字符串

的示例
<Document docID="Uplift">
<DocHeader>
<DocTitle>Hourly Uplift and Intertie Offer Guarantee Estimates Report</DocTitle>
<DocRevision>1</DocRevision>
<DocConfidentiality>
  <DocConfClass>PUB</DocConfClass>
</DocConfidentiality>
<CreatedAt>2014-04-01T16:03:23</CreatedAt>
</DocHeader>
<DocBody>
<DeliveryDate>2014-04-01</DeliveryDate>
<HourlyUplift>
  <DeliveryHour>1</DeliveryHour>
  <Uplift>1</Uplift>
  <IOG>0.02</IOG>
</HourlyUplift>
<HourlyUplift>
  <DeliveryHour>2</DeliveryHour>
  <Uplift>0</Uplift>
  <IOG>0</IOG>
</HourlyUplift>

以下是我如何将xml数据绑定到XAML中的DataGrid

<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Element[DocBody].Elements[HourlyUplift]}" Margin="0,33,0,0">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Hour" Binding="{Binding Path=Element[DeliveryHour].Value}"/>
        </DataGrid.Columns>
    </DataGrid>

这就是我在Code Behind中设置xElement的方法

var List = XElement.Parse(xml);
        this.LibraryView.DataContext = List;

问题是当我运行代码时,DataGrid为空。有谁知道我哪里出错了?

1 个答案:

答案 0 :(得分:0)

使用Xml DataContext时,更容易使用XPath属性而不是Path:

<DataGrid x:Name="LibraryView" Margin="0,33,0,0"
          AutoGenerateColumns="False"
          ItemsSource="{Binding XPath=Document/DocBody/HourlyUplift}" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Hour" Binding="{Binding XPath=DeliveryHour}"/>
    </DataGrid.Columns>
</DataGrid>

请注意,斜杠(/)在XPath中表示“ direct child ”。其他一些基本的XPath表示法(//)表示后代,(@)表示XML属性。

在代码隐藏中,使用XmlDocument代替XElement

var List = new XmlDocument();
List.LoadXml(xml);
this.LibraryView.DataContext = List;