2015-08-28 38 views
2

我已經通過了一堆例子在網上看了,但我無法找到任何工作(或我做錯了)。更新組合框的下拉BindingSource的改變後

組合框,勢必像這樣的詞典(字符串,字符串),並沒有什麼:

cbBox.DataSource = New BindingSource(dictStrings.Keys, Nothing) 

然而,dictStrings.Add(s1, s2)被調用後,組合框的下拉菜單中未列出的新附加值dictStrings。我怎樣才能解決這個問題?我嘗試重新綁定datasource,但它只是將下拉菜單留空。我試圖使用ResetBindings()函數,但這不會起作用。謝謝。

+1

使用'名單'作爲數據源存在同樣的問題 - 他們不看更改的內容或提供的通知。您可以使用'BindingList '來替代列表,但是對於需要編寫自定義集合類的字典,可能需要實現IDictionary並提供通知。一個'的ObservableCollection(中KeyValuePair(字符串,字符串))'可能工作(還沒有嘗試過) – Plutonix

+0

謝謝你的信息 – cjw

+0

我檢查和ObservableDictionary從IDictionary中和INotifyCollectionChanged建是很酷,但它不會幫助這個問題 - 它需要IBindingList的這以Dictionary爲基礎並不容易。 – Plutonix

回答

1

您可以創建一個新的綁定,但你會失去你的當前指數的位置,如果你有SelectedIndexChanged事件有線了,這可能會推出一些意想不到的煙花爆竹,因此這將是一個變通辦法:

Dim index As Integer = cbBox.SelectedIndex 
RemoveHandler cbBox.SelectedIndexChanged, AddressOf cbBox_SelectedIndexChanged 
dictStrings.Add("new key", "new value") 
cbBox.DataSource = New BindingSource(dictStrings.Keys, Nothing) 
cbBox.SelectedIndex = index 
AddHandler cbBox.SelectedIndexChanged, AddressOf cbBox_SelectedIndexChanged 
-1

你試過cbBox.DataSource.refresh?

+0

我得到這樣的:在類型公共成員「刷新」「的BindingSource」未找到 – cjw

+2

有沒有這樣的方法。 – Plutonix

0
ComboBox1.Update() 

應該解決的問題。

編輯:cbBox.Update()