.NET 字典键作为 ListBox 数据源

标签 .net windows data-binding collections listbox

我的 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/

相关文章:

c# - 如何使用 docker 在 dotnet 上优雅地关闭?

c++ - wglCreateContext GetLastError() 0xc007001f

wpf - 将 MVVM 用于 WPF 对话框

wpf 如何判断数据绑定(bind)何时完成?

c# - BLToolkit-mysql-connector异常: Could not load file or assembly MySql.数据,版本=6.9.7.0

c# - 如何检查给定的 USB 设备是否已插入?

c# - 如何从 Type.GUID 创建对象

c# - Windows 7中的捕获删除操作(首选)

windows - 我正在尝试在 Windows 7 x64 上构建 Apache Hadoop 2.5.0,但我一直遇到未知错误

xml - 哪个更快,XML + XSL 或 CLR + DataBinding