如何将XML文件绑定到ComboBox?

时间:2013-10-18 09:47:09

标签: c#

我想制作国家组合框,如何将此 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> ....

3 个答案:

答案 0 :(得分:0)

我相信你走的正确。

  1. 创建一个代表您在组合框中的国家/地区的类: CountryView
  2. 在那里放置属性:代码,iso,名称等......
  3. 像你正在做的那样解析你的xml并创建CountryView的实例。
  4. 将数据源设置为列表
  5. 相应地设置displayMember和displayValue:每个都设置为类中的属性名称
  6. 为了更好的性能缓存您的国家/地区列表(如果它们没有改变,我猜它是一个非常不可变的列表)
  7. 从你提问你正在尝试绑定到匿名类型。我从来没有尝试过,而且我宁愿为这种需要设置一个命名类。

答案 1 :(得分:0)

试试这个: -

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

答案 2 :(得分:0)

我正在为WPF做这件事。

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