我有以下界面:
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";
我收到错误:“无法绑定到新的值成员。参数名称:值”
我该如何解决这个问题?
答案 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";