【问题标题】:Why am I getting exception when binding IList to a combo box?为什么将 IList 绑定到组合框时出现异常?
【发布时间】:2011-04-14 18:51:45
【问题描述】:

我有以下类/接口。我收到一个 ArgumentException,说“复杂数据绑定接受 IList 或 IListSource 作为数据源”。但是,我将其设置为 IList。我做错了什么?

public interface IOriginList : IList<IOriginEntry>
{
   ...
}

public class OriginList : Interfaces.IOriginList
{
   ...
}

// Binding code
IList<IOriginEntry> originList = new OriginList();
cboOrigin.DataSource = originList;

【问题讨论】:

    标签: c# .net binding combobox


    【解决方案1】:

    我不相信您可以绑定到泛型 IList,只能绑定到非泛型 IList。

    试试这个:

    cboOrigin.DataSource = originList.ToArray();
    


    * 编辑 *

    实际上,问题可能在于 IList 是接口类型? IOriginEntry 无处设置为具体对象,您无法将组合框项绑定到接口。

    你也可以试试这个:

    public class OriginEntry {
        public string Name {get; set;}
    }
    
    public interface IOriginList : IList<OriginEntry> {
        ...
    }
    
    public class OriginList : Interfaces.IOriginList {
       ...
    }
    
    // Binding code
    IList<IOriginEntry> originList = new OriginList();
    cboOrigin.DataBindings.Add(new Binding("SelectedValue", originList, "Name"));
    

    【讨论】:

    • ToArray() 有点重,直接转换成IList即可。
    • ToArray 不是 IList 的成员。如果我尝试转换为非泛型 IList,则会收到 InvalidCastException。
    • 这可能有效,但我无法控制 IOriginList/OriginList/IOriginEntry/OriginEntry 接口/类(它们来自第 3 方)。我希望我不必遍历列表并手动添加项目。
    • ToArray 是一种扩展方法。请务必添加一个 using for System.Linq
    • 您的第 3 方是否有任何使用他们的类进行数据绑定的示例?还是支持论坛?
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多