繁体   English   中英

Winforms将ComboBox SelectedItem绑定到对象属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM