如何将 XML 文件绑定到 ComboBox

本文关键字:绑定 ComboBox 文件 XML | 更新日期: 2023-09-27 18:36:00

我想制作一个Country ComboBox,如何将这个XML文件绑定到ComboBox,这是我的代码:

public class CountriesComboBox : ComboBox
{
    public CountriesComboBox()
    {
        XDocument obj = XDocument.Load("countries.xml");
        //DisplayMember = "countryiso";
        //ValueMember = "countrycode";
        DataSource = obj.Descendants("country").Select(x => new
        {
            countrycode = x.Attribute("code").Value,
            countryiso = x.Attribute("name").Value
        }).ToList();
    }
}

这是我的 XMl 文件:

<countries>
  <country code="AF" iso="4">Afghanistan</country> 
  <country code="AL" iso="8">Albania</country> 
  <country code="DZ" iso="12">Algeria</country> 
  <country code="AS" iso="16">American Samoa</country> 
  <country code="AD" iso="20">Andorra</country> 
  <country code="AO" iso="24">Angola</country> ....

如何将 XML 文件绑定到 ComboBox

我相信

你走对了路。

  1. 在组合框中创建一个代表您的国家/地区的类:国家/地区视图
  2. 把属性放在那里:代码、iso、名称等...
  3. 像您一样解析您的 XML 并创建国家/地区视图的实例。
  4. 将数据源设置为列表
  5. 相应地设置 displayMember 和 displayValue:每个都设置为类中的一个属性名称
  6. 为了获得更好的性能,缓存您的国家/地区列表(如果他们没有更改,我想这是一个非常不可变的列表)

从您的问题中,您当前正在尝试绑定到匿名类型。我从来没有尝试过,我宁愿有一个命名类来满足这个需求。

我正在为 WPF 做这件事。

comboBox1.ItemsSource = xdoc.Root.Descendants("country").Select(x => x.Value);

试试这个:-

public class CountriesComboBox : ComboBox
{
    public CountriesComboBox()
    {
        XDocument obj = XDocument.Load("countries.xml");
        //DisplayMember = "countryiso";
        //ValueMember = "countrycode";
        DataSource = obj.Descendants("country").Select(x => new
        {
            countrycode = x.Attribute("code").Value,
            countryiso = x.Attribute("iso").Value
        }).ToList();
    }
}

使用 x.Attribute("iso").Value 而不是 x.Attribute("name").Value