簡體   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