2017-06-14 249 views
0

目前我設置我的組合框的數據源這樣:數據綁定組合框的SelectedValue

comboBox1.DataSource = _team; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "ID"; 

團隊的類型是ListItemModel的泛型列表,它看起來像:

public class ListItemModel 
{ 
    private string _name; 
    private short _id; 
    public string Name 
    { 
     get 
     { 
      return this._name; 
     } 
    } 
    public short ID 
    { 
     get 
     { 
      return this._id; 
     } 
    } 
    public ListItemModel(string name, short id) 
    { 
     this._name = name; 
     this._id = id; 
    } 
} 

我再試圖databing它作爲例如:

comboBox1.DataBindings.Add("SelectedValue", _person.Person, "TeamId", true, DataSourceUpdateMode.OnPropertyChanged); 

我的數據源(模型)設置:

public class PersonViewModel : INotifyPropertyChanged 
{ 
    public Person Person { get; set; } 
    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, e); 
    } 
} 

我能夠正確填充組合框,OnPropertyChanged事件實際上正常工作,因爲我可以看到正確更改的數據。

的問題是雙重的:

1)初始加載/設置了組合框的SelectedValue不設置,即使我已經數據綁定它。 2)如果我改變組合框中的選擇,然後失去焦點,它不保留選定的值,只顯示沒有選中的內容。 OnPropertyChanged正在工作,因爲我可以看到TeamId正確更改。

我想知道什麼我已經錯過了,當涉及到數據綁定組合框

+0

你可以顯示你的班級「人」的代碼? – Bahrom

回答

0

願意爲此整天挖成後組合框如何將數據綁定它結束了一個簡單的解決方案。

我最終將public class ListItemModel Id屬性從short更改爲int,並且它綁定並正確選擇了該值。

數據綁定會觸發,並正確設置SelectedValue屬性,因爲我注意到數據綁定總是正確的。在此之後,DisplayMember和ValueMember綁定將觸發,再次檢查SelectedValue。 ValueMember的類型是short,而不是int,因爲它會找不到匹配項,所以將它設置爲null。

它奇怪的如何沒有例外或錯誤,它只是默默地去空。

希望這對所有提出這個問題的人都有用。