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

本文关键字:列表 接口 出错 嵌套 对象 绑定 | 更新日期: 2023-09-27 18:18:46

我有以下接口:

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";

我得到错误:"不能绑定到新的值成员。"参数名称:value"

我该如何解决这个问题?

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

我必须感谢来自这个链接的家伙。

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";