将ExpandoObject与ComboBox一起使用项目不会选择显示和值成员

时间:2016-03-16 12:22:23

标签: c# winforms

我不是100%熟悉dynamic关键字的低级实现细节和ExpandoObject类的使用,所以这可能是一个愚蠢的问题,但我设置的DisplayMember和ValueMember是组合框,然后实例化一个ExpandoObject对象并将其添加到ComboBox,但显示和值成员似乎没有被拾取。这是我在标准C#WinForms应用程序中的代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        dynamic eo = new ExpandoObject();
        eo.DisplayMember = "Hello";
        eo.ValueMember = 0;

        comboBox1.DisplayMember = "DisplayMember";
        comboBox1.ValueMember = "ValueMember";

        comboBox1.Items.Add(eo);
    }

但是,该项目的显示文本是" System.Dynamic.ExpandoObject"。我已经创建了一个用于此的自定义类,它可以工作,但我想知道为什么ExpandoObject不起作用。如果有人能指出我正确的方向,我会非常感激。

1 个答案:

答案 0 :(得分:1)

除非您为其创建自定义ExpandoObject,否则无法使用

TypeDescriptionProvider

你有两种选择。您可以使用更简单的方法并使用匿名对象,也可以为TypeDescriptionProvider创建ExpandoObject

如果您的代码与示例一样简单,那么您就可以执行此操作:

private void Form1_Load(object sender, EventArgs e)
{
    var eo = new {
        DisplayMember = "Hello",
        ValueMember = 0
    };

    comboBox1.DisplayMember = "DisplayMember";
    comboBox1.ValueMember = "ValueMember";

    comboBox1.Items.Add(eo);
}

但是,如果您必须使用ExpandoObject,则必须创建与here类似的自定义TypeDescriptionProvider