我正在尝试将我IReadOnlyList
课程的Material
绑定到ComboBox
,但我找不到办法使其有效。
var bList = new BindingList<Material>(listToBind);
这给了我Argument type 'System.Collections.Generic.IReadOnlyList<Data.Material>' is not assignable to parameter type 'System.Collections.Generic.IList<Data.Material>'
我是否需要将其投射到IList
或者还有其他方法可以实现此目标吗?
答案 0 :(得分:2)
BindingList<T>
没有构造函数,它接受IReadOnlyList
扩展的任何接口。
BindingList<T>
有两个构造函数(MSDN docs),一个是空的,另一个是IList<T>
。但是,IReadOnlyList<T>
扩展了IEnumerable<T>
,这意味着它提供的函数.ToList()
为我们提供了List<T>
,我们可以使用它来填充BindingList<T>
。
最终代码如下所示:
var bList = new BindingList<Material>(listToBind.ToList());
答案 1 :(得分:0)
在MSDN中:
的BindingList(IList的)
使用指定的列表初始化BindingList类的新实例。
所以你需要一个实现IList的对象; IReadOnlyList没有。
您可以使用以下代码获得所需内容:
var bList = new BindingList<Material>(listToBind.ToList());