suf*_*kml 5 c# data-binding combobox winforms
我有两个简单的类:
public class Customer
{
public String CustomerID { get; set; }
public String Forename { get; set; }
public String Surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class Order
{
public String OrderID { get; set; }
public Decimal Value { get; set; }
public Customer OrderedBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个 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" });
Run Code Online (Sandbox Code Playgroud)
我有一个组合框,我将数据源设置为我的客户列表,并将 DisplayMember 设置为 Customer 对象的 Forename 属性:
comboBox1.DisplayMember = "Forename";
comboBox1.DataSource = customers;
Run Code Online (Sandbox Code Playgroud)
结果是一个包含两个项目“John”和“Jeremy”的组合框。到目前为止,我并没有太困惑。
不过,我希望能够做的是根据 Combobox 中的选择设置 Order 实例的“OrderedBy”属性 - 复杂类型可以像这样绑定到 ComboBoxes 吗?
我试过这个,但它似乎没有更新 Order 实例的 OrderedBy 属性:
Order myOrder = new Order();
comboBox1.DataBindings.Add("SelectedItem", myOrder, "OrderedBy");
Run Code Online (Sandbox Code Playgroud)
我不知道我想要做什么是可能的,或者它是否超出了 WinForms 中数据绑定的功能。
我想避免将我的 Order 对象更新为 ComboBox 上的事件处理程序的一部分,并尽可能仅使用数据绑定。
您的代码将更新有界对象的属性,但仅在ComboBox失去焦点之后。
如果您想在SelectedItem更改后立即更新属性,最快的方法是手动发送有关更改的消息。
在 a 中ComboBox,当SelectedItem发生变化时,它会触发该SelectionChangesCommitted事件。
您可以创建一个事件处理程序来处理更改并手动调用绑定:
private void combobox1_SelectionChangesCommitted(Object sender, EventArgs e)
{
((ComboBox)sender).DataBindings["SelectedItem"].WriteValue();
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用该ComboBox.ValueMember属性并将您的对象属性绑定到SelectedValue.
| 归档时间: |
|
| 查看次数: |
9308 次 |
| 最近记录: |