首页 文章

Winforms将ComboBox SelectedItem绑定到Object属性

提问于
浏览
3

我有两个简单的类:

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

我有一个组合框,我将数据源设置为Customers列表,并将DisplayMember设置为Customer对象的Forename属性:

comboBox1.DisplayMember = "Forename";
comboBox1.DataSource = customers;

结果是一个包含两个项目的组合框,“John”和“Jeremy” . 到目前为止,我并不是太困惑 .

我希望能够做到的是,根据Combobox中的选择设置Order实例的“OrderedBy”属性 - 复杂类型是否可以绑定到这样的ComboBox?

我试过这个,但它似乎没有更新Order实例的OrderedBy属性:

Order myOrder = new Order();
comboBox1.DataBindings.Add("SelectedItem", myOrder, "OrderedBy");

我不知道我正在尝试做什么是可能的,或者它是否超出了WinForms中数据绑定的功能 .

我想避免将我的Order对象更新为ComboBox上的事件处理程序的一部分,并且如果可能的话,仅使用数据绑定 .

1 回答

  • 1

    您的代码将更新有界对象的属性,但仅在 ComboBox 失去焦点后才会更新 .

    如果您想在 SelectedItem 更改后直接更新属性,最快的方法是手动发送有关更改的消息 .
    ComboBox 中,当 SelectedItem 更改时,它将触发 SelectionChangesCommitted 事件 .

    您可以创建一个事件处理程序来处理更改并手动调用绑定:

    private void combobox1_SelectionChangesCommitted(Object sender, EventArgs e)
    {
        ((ComboBox)sender).DataBindings["SelectedItem"].WriteValue();
    }
    

    您还可以使用 ComboBox.ValueMember 属性并将对象属性绑定到 SelectedValue .

相关问题