我不是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不起作用。如果有人能指出我正确的方向,我会非常感激。
答案 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
。