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();
}