将列表框绑定到对象列表(嵌套接口)时出错

时间:2013-06-15 22:32:53

标签: c# .net data-binding interface

我有以下界面:

public interface IIdentifiable
{
    object Id { get; }
}
public interface IIdentifiable<T>: IIdentifiable
{
    new T Id { get; }
}
public interface IItem: IIdentifiable<Guid>
{
    string Name { get; set; }
}

当我想将列表框绑定到以下项目列表时:

lbItems.DataSource = list;     // List<IItem> here
lbItems.DisplayMember = "Name";
lbItems.ValueMember = "Id";

我收到错误:“无法绑定到新的值成员。参数名称:值”

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我要感谢来自link的人们。

  

WinForms绑定系统基于TypeDescriptor的使用,和   TypeDescriptor.GetProperties(typeof(IItem))仅返回   声明的属性... ComboBox找到Name,因为它是   在IItem中声明,但不是Id

要解决此问题,我必须通过投影列表中的每个项目来创建匿名类型。

这是最终的代码:

lbItems.DataSource = list.Select(item => new { item.Id, item.Name }).ToList();
lbItems.DisplayMember = "Name";
lbItems.ValueMember = "Id";