【发布时间】:2015-08-29 04:42:00
【问题描述】:
我在网上浏览了一堆示例,但找不到任何可行的方法(或者我做错了)。
ComboBox 像这样绑定到 (String, String) 和 Nothing 的字典:
cbBox.DataSource = New BindingSource(dictStrings.Keys, Nothing)
但是,在调用dictStrings.Add(s1, s2) 之后,ComboBox 的下拉菜单不会列出新添加到dictStrings 的值。我怎样才能解决这个问题?我尝试重新绑定datasource,但它只是将下拉菜单留空。我尝试使用ResetBindings() 函数,但效果不佳。谢谢。
【问题讨论】:
-
使用
List<T>作为数据源也存在同样的问题——它们不会监视内容的变化或提供通知。您可以使用BindingList<T>代替列表,但对于字典,您需要编写一个自定义集合类,可能实现 IDictionary 并提供通知。ObservableCollection(Of KeyValuePair(Of String, String))可能有效(尚未尝试) -
我检查了一下,从 IDictionary 和 INotifyCollectionChanged 构建的 ObservableDictionary 很酷,但它无助于解决这个问题 - 它需要 IBindingList,而以 Dictionary 为基础并不容易实现。