【发布时间】:2014-02-12 22:32:26
【问题描述】:
我有一个类似于下面的 XML 文件。我计划将 XML 文件的内容绑定到 WPF 中的 Datagrid。
<?xml version="1.0" encoding="utf-8"?>
<ProductData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PurchaseOrderLine>
<ProductItem>
<LineNumber>1</LineNumber>
</ProductItem>
</PurchaseOrderLine>
所以我为 PurchaseOrderLine 和 ProductItem 开发了两个简单的类,如下所示
class PurchaseOrderLine {
public ProductItem productItem { get; set; }}
class ProductItem{
public int LineNumber { get; set; }}
之后,当我尝试在下面的 xaml 中访问它时,我无法获取 LineNumber 详细信息,这是为什么呢?我有什么遗漏吗?其实请告诉我如何访问 xml 中的子元素?
<DataGrid AutoGenerateColumns="False" Name="dataGrid" ItemsSource="{Binding Path=Elements[PurchaseOrderLine]}" Height="214" Width="657">
<DataGrid.Columns>
<DataGridTextColumn Header="Line Number" Binding="{Binding Path = Element[ProductItem.LineNumber].Value}" />
</DataGrid.Columns>
我正在动态加载 xml 文件
var productList = XElement.Load(FileName);
this.dataGrid.DataContext = productList;
【问题讨论】:
-
您是否在第二个绑定中尝试过小写“ProductItem”(即“productItem”)?我记得 XAML 是区分大小写的。您在输出窗口中是否收到任何 System.Data 异常?
-
@LordTakkera,访问 ProductItem.LineNumber 等元素是否正确。因为我也尝试过 productItem.LineNumber 。它不工作
-
通常你会这样做(使用小写字母给你的属性名称)。我不确定为什么读取 XML 文档会有任何不同。您是否尝试过从第二个绑定中删除“元素”?如果对象已经是数据上下文,它可能不再是 XElement,因此不需要这块。 System.Data 异常可以在这里为您提供指导。
-
@LordTakkera 想知道也不例外。还有其他方法可以绑定xml文件吗?
-
您总是可以反序列化(而不是使用 XElement)。如果您可以接受该解决方案,我可以发布一个示例作为答案。
标签: xml wpf datagrid wpfdatagrid