【问题标题】:Error when binding listbox to a list of objects (nested interfaces)将列表框绑定到对象列表(嵌套接口)时出错
【发布时间】:2013-06-15 22:32:52
【问题描述】:

我有以下接口:

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: c# .net data-binding interface


    【解决方案1】:

    我必须感谢来自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";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多