是否可以将模型类的属性绑定到ComboBox?

时间:2014-11-25 12:05:53

标签: c# winforms binding properties combobox

(注意:我正在标记它winforms但我认为它确实也适用于WPF)

我有一个ComboBox和一个模型类(让我们说人物)。 Person包含多个公共属性(Name,Age,Sex,Adress等)。

是否有(标准)方法将我的ComboBox数据源绑定到这些属性,因此ComboBox显示" Name"," Age","性"和"地址"作为清单?

3 个答案:

答案 0 :(得分:1)

您的表格:

public partial class Form1 : Form
{
    BindingList<PropertyInfo> DataSource = new BindingList<PropertyInfo>();

    public Form1()
    {

        InitializeComponent();

        comboBox1.DataSource = new BindingList<PropertyInfo>(typeof(Person).GetProperties());
        // if want to specify only name (not type-name/property-name tuple)
        comboBox.DisplayMember = "Name";
    }
}

你的班级:

public class Person
{
    public string Name { get; set; }
    public uint Age { get; set; }
    public bool Sex { get; set; }
    public string Adress { get; set; }
}

答案 1 :(得分:0)

要获取属性名称,请使用反射:

var propertyNames = person
    .GetType() // or typeof(Person)
    .GetProperties()
    .Select(p => p.Name)
    .ToArray();

(因为所有Person个实例的结果都是相同的,我会对其进行缓存,例如在静态变量中。

要在组合框中显示属性,请使用DataSource(WinForms):

comboBox.DataSource = propertyNames;

ItemsSource(WPF):

<ComboBox ItemsSource="{Binding PropertyNames}"/>

(假设,当前数据上下文包含公共属性PropertyNames)。

答案 2 :(得分:0)

在WPF中:

public class Person
{
    public string Name { get; set; }
    public int? Age { get; set; }
    public string Sex { get; set; }
    public string Address { get;set;}

    public override string ToString()
    {
        return string.Format("{0}, {1}, {2}, {3}", Name, Age, Sex, Address);
    }
}

public class PersonViewModel
{
    public PersonViewModel()
    {
        PersonList = (from p in DataContext.Person
                      select new Person
                      {
                          Name = p.Name,
                          Age = p.Age,
                          Sex = p.Sex,
                          Address = p.Address
                      }).ToList();
    }

    public List<Person> PersonList { get; set; }
    public Person SelectedPerson { get; set; }
}

XAML:

<ComboBox ItemsSource="{Binding PersonList}" SelectedItem="{Binding SelectedPerson}"/>