C# Winforms将组合框SelectedItem绑定到对象属性
我有两个简单的课程:C# Winforms将组合框SelectedItem绑定到对象属性,c#,winforms,data-binding,combobox,C#,Winforms,Data Binding,Combobox,我有两个简单的课程: public class Customer { public String CustomerID { get; set; } public String Forename { get; set; } public String Surname { get; set; } } 及 然后,我创建一个客户对象列表: List<Customer> customers = new List<Customer>(); customers
public class Customer
{
public String CustomerID { get; set; }
public String Forename { get; set; }
public String Surname { get; set; }
}
及
然后,我创建一个客户对象列表:
List<Customer> customers = new List<Customer>();
customers.Add(new Customer() { CustomerID = "1", Forename = "John", Surname = "Smith"});
customers.Add(new Customer() { CustomerID = "2", Forename = "Jeremy", Surname = "Smith" });
结果是一个包含两个项目的组合框,“John”和“Jeremy”。到目前为止我还不太困惑
不过,我希望能够根据Combobox中的选择设置Order实例的“OrderedBy”属性——复杂类型可以像这样绑定到Combobox吗
我已经尝试过了,但它似乎没有更新Order实例的OrderedBy属性:
Order myOrder = new Order();
comboBox1.DataBindings.Add("SelectedItem", myOrder, "OrderedBy");
我不知道我想做的是可能的,还是超出了WinForms中数据绑定的能力
我希望避免将我的Order对象作为ComboBox上事件处理程序的一部分进行更新,如果可能,只使用数据绑定。您的代码将更新绑定对象的属性,但仅在
ComboBox
失去焦点之后
如果要在SelectedItem
更改后立即更新属性,最快的方法是手动发送有关更改的消息。在
组合框中
中,当SelectedItem
更改时,它将触发SelectionChangesCommitted
事件
您可以创建事件处理程序来处理更改,并手动调用绑定:
private void combobox1_SelectionChangesCommitted(Object sender, EventArgs e)
{
((ComboBox)sender).DataBindings["SelectedItem"].WriteValue();
}
您还可以使用
组合框.ValueMember
属性并将对象属性绑定到SelectedValue
谢谢Fabio,这很有帮助!真的很有用!
Order myOrder = new Order();
comboBox1.DataBindings.Add("SelectedItem", myOrder, "OrderedBy");
private void combobox1_SelectionChangesCommitted(Object sender, EventArgs e)
{
((ComboBox)sender).DataBindings["SelectedItem"].WriteValue();
}