在使用XML填充DataGrid时遇到问题。
下面是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>下面是我如何在代码中设置xElement的方法
var List = XElement.Parse(xml);
this.LibraryView.DataContext = List;问题是当我去运行代码时,DataGrid是空的。有人知道我哪里出错了吗?
发布于 2014-04-02 02:34:49
在使用Xml DataContext时,更容易使用XPath属性而不是路径:
<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中的意思是“直接子”。其他一些基本的XPath符号是(//)表示后代,(@)表示XML属性。
在代码隐藏中,使用XmlDocument而不是XElement:
var List = new XmlDocument();
List.LoadXml(xml);
this.LibraryView.DataContext = List;https://stackoverflow.com/questions/22798242
复制相似问题