C#将IDictionary与Listbox绑定

时间:2019-01-06 22:18:00

标签: c# visual-studio

我是Windows窗体和学习的新手。 我有一个简单的代码,其中包含用listbox1填充的表单。我试图通过将其绑定到IDictionary实例来填充它。

static IDictionary<string, string> Bind_Data = new Dictionary<string, string>();

    Binding myBinding = new Binding("DataSource", Bind_Data, "Key");   

    listBox1.DataBindings.Add(myBinding);

运行此代码时出现以下错误。

  

错误:System.Reflection.TargetInvocationException:属性访问器   物体上的“钥匙”   'System.Collections.Generic.Dictionary`2 [[System.String,mscorlib,   版本= 4.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,   版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089]]'   引发以下异常:“对象与目标类型不匹配。”   ---> System.Reflection.TargetException:对象与目标类型不匹配。在   System.Reflection.RuntimeMethodInfo.CheckConsistency(对象目标)

如果有人可以帮助我理解此错误,请多加感谢。

我可以使用

listBox1.DataSource=new Binding(Bind_Data, null);
listBox1.ValueMemeber="Key";
listBox1.DisplayMember="Value";

但是我想使用绑定

1 个答案:

答案 0 :(得分:0)

查看该构造函数的MSDN文档:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.binding.-ctor?view=netframework-4.7.2#System_Windows_Forms_Binding__ctor_System_String_System_Object_System_String_

数据源参数只能是某些对象-字典类型不能实现IList,我怀疑这是您收到上述异常的原因。

如果您的基础类型必须是Dictionary,则可能需要将其包装在实现IList的自定义类中,以便获得所需的绑定,否则只需使用上面具有的第二种样式< / p>