c# - Winforms 将 ComboBox SelectedItem 绑定(bind)到对象属性

标签 c# winforms data-binding combobox

我有两个简单的类:

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

然后我创建一个客户对象列表:

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 设置为客户对象的 Forename 属性:

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

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

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

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

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

我不知道我正在尝试做的事情是否可行,或者它是否超出了 WinForms 中数据绑定(bind)的能力。

我想避免必须将我的 Order 对象更新为 ComboBox 上事件处理程序的一部分,并且尽可能只使用数据绑定(bind)。

最佳答案

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

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

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

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

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

关于c# - Winforms 将 ComboBox SelectedItem 绑定(bind)到对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343543/

相关文章:

silverlight - 我可以检测 Silverlight 中的绑定(bind)更改吗?

c# - 响应服务器请求时 SignalR "Start must be called before data can be sent"

c# - 如何让我的文本框捕获字符 为什么文本框不捕获输入

c# - 输出图像字符串C++到C#父程序(不保存到硬盘)

c# - JSON.NET:如何在不在数组中的情况下仅序列化 DataTable 对象中的一行?

c# - 检查目标计算机上安装的 websphere mq?

c# - “拒绝访问”到 Windows 应用程序中的 xml 文件

c# - 预加载程序集 : referenced, 未引用,直到需要时才加载

silverlight - 如何使 Silverlight 自定义控件的属性可数据绑定(bind)?

.net - WPF - 将列表框绑定(bind)到列表 <string> - 我做错了什么?