是否可以将模型类的属性绑定到 ComboBox
本文关键字:属性 绑定 ComboBox 模型 是否 | 更新日期: 2023-09-27 18:32:04
(注意:我winforms
标记它,但我认为它也适用于WPF)
我有一个组合框和一个模型类(假设是人)。人员包含多个公共属性(姓名、年龄、性别、地址等)。
是否有一种(标准)方法可以将 ComboBox 的数据源绑定到这些属性,以便 ComboBox 显示"名称"、"年龄"、"性别"和"地址"作为其列表?
您的表单:
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; }
}
若要获取属性名称,请使用反射:
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
)。
在 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}"/>