我的 winforms 应用程序中有一个 ListBox。我希望它具有字典的键作为 DataSource,所以我按如下方式操作:
IDictionary<Entity1, Entity2> myEntities = new Dictionary<Entity1, Entity2>();
myListBox.DataSource = myEntities.Keys;
所以我在第二行遇到以下错误:
Complex databinding accepts as a datasource either in Ilist or IListSource
我已经尝试了两件不会做的事情:
myListBox.DataSource = (IList
)myEntities.Keys;
抛出 InvalidCastException 异常:
Can't convert an object of type 'KeyCollection[Entity1,Entity2]' to type 'System.Collections.Generic.IList`1[Entity1]'.
而且我也尝试过:
myListBox.DataSource = myEntities.Keys.ToList
();
但是通过这种方式我失去了绑定(bind),当我修改 myEntities
时,myListBox.DataSource
没有改变。
注意:异常信息是我翻译的,所以它们可能与我写的不完全一样。
有什么办法吗?
谢谢!
最佳答案
myListBox.DataSource = (from keys in myEntities.Keys
select keys)
.ToList();
第三次魅力...
好的,
我相信您必须继承 Dictionary 并覆盖 .Add 方法才能触发事件。在这种情况下,您将需要重新查询字典键。根据我发现的资源(包括:How to Bind...),字典在内容更改时不会抛出事件。
关于.NET 字典键作为 ListBox 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809583/