在让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为空。有谁知道我哪里出错了?
答案 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;