如何将数据从XElement绑定到组合框

时间:2013-04-02 18:23:47

标签: c# wpf xml combobox xelement

XElement Doc。

<forms xmlns="">
  <form>
    <id>1361</id>
    <name>TEST3</name>
  </form>
  <form>
    <id>1658</id>
    <name>TEST4</name>
  </form>
  <form>
    <id>1975</id>
    <name>Mac New Patient</name>
  </form>
  <form>
    <id>2209</id>
    <name>Test Atlantic</name>
  </form>
  <form>
    <id>2565</id>
    <name>Rice Creek Test</name>
  </form>
</forms>

代码

 XElement xmlForms = data.GetXmlForm();
 var ElementsList = from c in xmlForms.Element("Forms").Descendants("form")
 select new { Name = c.Element("name").Value, ID = c.Element("id").Value };

 cBox_NewPat.DataContext = ElementsList; 
 cBox_NewPat.DisplayMemberPath = "name";
 cBox_NewPat.SelectedValuePath = "id";

我需要将数据(名称,id)从XElement绑定到WPF Combobox。由于某种原因,它无法正常工作,甚至无法将XML中的数据导入元素列表。

2 个答案:

答案 0 :(得分:0)

属性名称区分大小写。

您需要更改

cBox_NewPat.DisplayMemberPath = "name";
cBox_NewPat.SelectedValuePath = "id";

cBox_NewPat.DisplayMemberPath = "Name";
cBox_NewPat.SelectedValuePath = "ID";

匹配您的匿名类型。

答案 1 :(得分:0)

看起来你在这里遗漏了几件事(除了空结果 - 我将在下面介绍)。

  1. 您需要在组合框上设置ItemsSource属性。

    cBox_NewPat.ItemsSource = ElementsList
    
  2. 你应该使用

    cBox_NewPat.DisplayMemberPath = "Name"; 
    

    而不是

    cBox_NewPat.DisplayMemberPath = "name";
    

    因为您的匿名类型属性称为“名称”,而不是“名称”。与SelectedValuePath相同

  3. 请显示您在GetXmlForm方法中执行的操作 - 这是出错的地方。如果你执行XElement.Parse(xmlString),那么如果从forms元素中删除命名空间属性(xmlns),它将起作用。你还需要使用

    xmlForms.Descendants("form")
    

    而不是

    xmlForms.Element("forms").Descendants("form")