(注意:我正在标记它winforms
但我认为它确实也适用于WPF)
我有一个ComboBox和一个模型类(让我们说人物)。 Person包含多个公共属性(Name,Age,Sex,Adress等)。
是否有(标准)方法将我的ComboBox数据源绑定到这些属性,因此ComboBox显示" Name"," Age","性"和"地址"作为清单?
答案 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}"/>