[英]Winforms Binding a ComboBox SelectedItem to an Object Property
我有两个简单的类:
public class Customer
{
public String CustomerID { get; set; }
public String Forename { get; set; }
public String Surname { get; set; }
}
和
public class Order
{
public String OrderID { get; set; }
public Decimal Value { get; set; }
public Customer OrderedBy { get; set; }
}
然后,我创建一个Customer对象列表:
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" });
我有一个组合框,将数据源设置为我的客户列表,将其设置为DisplayMember作为Customer对象的Forename属性:
comboBox1.DisplayMember = "Forename";
comboBox1.DataSource = customers;
结果是一个组合框,其中包含两个项“ John”和“ Jeremy”。 到目前为止,我还不太困惑。
我想做的是根据组合框的选择设置Order实例的“ OrderedBy”属性-复杂类型可以这样绑定到ComboBox吗?
我已经尝试过了,但是它似乎没有更新Order实例的OrderedBy属性:
Order myOrder = new Order();
comboBox1.DataBindings.Add("SelectedItem", myOrder, "OrderedBy");
我不知道我想做的事情是否可行,或者它是否超出了WinForms中的数据绑定功能。
我想避免必须将ComboBox上的Order对象作为事件处理程序的一部分进行更新,并尽可能使用Data Binding。
您的代码将更新有界对象的属性,但仅在ComboBox
失去焦点之后。
如果要在SelectedItem
更改后立即更新属性,最快的方法是手动发送有关更改的消息。
在ComboBox
,当SelectedItem
更改时,它将触发SelectionChangesCommitted
事件。
您可以创建一个事件处理程序来处理更改,并手动调用绑定:
private void combobox1_SelectionChangesCommitted(Object sender, EventArgs e)
{
((ComboBox)sender).DataBindings["SelectedItem"].WriteValue();
}
您还可以使用ComboBox.ValueMember
属性并将对象属性绑定到SelectedValue
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.