2015-07-10 56 views
2

這是我第一次嘗試WinForms中的Databinding,因此請和我一起裸照。Winforms將組合框SelectedItem綁定到對象屬性

我有兩個簡單的類:

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

而且我有一個組合框,針對這我將數據源設置爲我的Customer列表,並將DisplayMember設置爲Customer對象的Forename屬性:

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

結果是一個包含兩個項目「John」和「Jeremy」的組合框。到目前爲止我並不太困惑。

雖然我希望能夠做到,但是基於Combobox的選擇,可以設置Order實例的OrderedBy屬性 - 可以將複合類型綁定到ComboBoxes上嗎?

我想這一點,但它似乎沒有被更新訂單實例的OrderedBy屬性:

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

我不知道如果我想要做的是可能的,或者如果它是超越WinForms中數據綁定的功能。

我想避免必須更新我的Order對象作爲ComboBox上的事件處理程序的一部分,並在可能的情況下單獨使用數據綁定。

乾杯

回答

1

您的代碼將更新界對象的屬性,但僅後失去ComboBox重點。

如果要在更改SelectedItem後立即更新屬性 - 最快的方法是手動發送有關更改的消息。
ComboBox更改SelectedItem將觸發事件SelectionChangesCommitted
所以,你可以創建從那裏約的變化

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

或者用使用ComboBox.ValueMember屬性發送消息的事件處理程序和綁定你的對象屬性的SelectedValue

+0

感謝法比奧,這有助於! – suffolkml

+0

@suffolkml,檢查我更新的答案。我沒有多少關於這個問題的更多信息 – Fabio

相關問題