【问题标题】:Binding XML to wpf datagrid将 XML 绑定到 wpf 数据网格
【发布时间】:2012-01-13 13:38:33
【问题描述】:

我有一个 WPF 数据网格和一个 xmlString,但在绑定它时遇到了问题。

我已阅读 this post 并按照说明进行操作,但无法正常工作。

我看到带有标题的列,但其中没有数据。有什么想法吗?

我应该说在加载窗口后单击按钮时调用后面的代码。

这是我的 XAML

<DataGrid x:Name="dtgMain" ItemsSource="{Binding Path=Elements[panel]}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="PanelCode" Binding="{Binding Path=Element[panelCode].InnerText}"/>
    </DataGrid.Columns>
</DataGrid>

这是我的代码隐藏

System.IO.StringReader reader = new System.IO.StringReader(response);
            XElement results = XElement.Load(reader);
            dtgMain.DataContext = results;

这是我的 xml

<data>
  <load count="2">true
    <panel index="10">
      <panelCode>100072
      </panelCode>
      <panelName>COM0100072*A
      </panelName>
      <panelPart>100072
      </panelPart>
      <numberLayers>4
      </numberLayers>
      <panelSize.display>21.0 x 24.0
      </panelSize.display>
      <lastEdited.display>16/11/2011 17:13:39
      </lastEdited.display>
      <panelStatus.display>Measurements Stored
      </panelStatus.display>
      <lastEditor>admin
      </lastEditor>
      <numberBonds>1
      </numberBonds>
      <numberSubComponents>0
      </numberSubComponents>
    </panel>
    <panel index="11">
      <panelCode>100352
      </panelCode>
      <panelName>COM0100352*C
      </panelName>
      <panelPart>100352
      </panelPart>
      <numberLayers>8
      </numberLayers>
      <panelSize.display>18.0 x 24.0
      </panelSize.display>
      <lastEdited.display>16/11/2011 17:18:47
      </lastEdited.display>
      <panelStatus.display>Measurements Stored
      </panelStatus.display>
      <lastEditor>admin
      </lastEditor>
      <numberBonds>1
      </numberBonds>
      <numberSubComponents>0
      </numberSubComponents>
    </panel>
  </load>
</data>

【问题讨论】:

  • 在我看来,您应该使用XmlDocument 系列的 XML 类,因为它们支持 Binding.XPath
  • H.B 您能否发布一个代码示例或至少链接到一些示例?
  • 在我链接到的XPath 属性文档中,逻辑上 的一个示例。
  • HB 这个例子有两点突出。第一个是它使用静态 xml 文件而不是像我的示例中那样以编程方式生成的文件。第二件事是它绑定到列表框而不是数据网格。您能否举例说明如何在我的情况下使用它?

标签: c# wpf data-binding


【解决方案1】:

XElement 没有“InnerText”属性。

您是否尝试过使用

Binding="{Binding Path=Element[panelCode].Value}"

改为?

编辑:

我刚刚用一个示例项目进行了测试,唯一的其他更改(除了使用 .Value)是更改 DataGrid 的 ItemsSource 以包含“加载”节点:

ItemsSource="{Binding Path=Element[load].Elements[panel]}"

因此您的数据网格将如下所示:

<DataGrid x:Name="dtgMain" ItemsSource="{Binding Path=Element[load].Elements[panel]}">
    <DataGrid.Columns>
       <DataGridTextColumn Header="PanelCode" Binding="{Binding Path=Element[panelCode].Value}"/>
    </DataGrid.Columns>
</DataGrid>

【讨论】:

  • 我开始使用它,并且确信我遇到了同样的情况。我将更改并显示结果:D
  • 使用 value 的结果是一样的,什么都不显示。
  • 我已经更新了我的答案以包含一个我已经测试过的解决方案(在 .NET 4 中)并验证它是否有效。看起来最初的 节点被视为根节点,但您不能像以前那样忽略 节点并直接跳到
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 2011-05-28
  • 2011-01-31
  • 2017-05-14
  • 2011-10-26
  • 2012-11-21
  • 2022-10-15
  • 1970-01-01
相关资源
最近更新 更多