我需要创建一个实现 IBindingList 的自定义集合,以便能够将它与来自第 3 方的自定义控件绑定。我遇到的另一个问题是我必须使该集合线程安全,因为我同时从多个线程手动插入项目。
无论如何,我BindingList<T>
在课堂上使用 a 作为字段,以免过多地重新发明轮子。所以我的课看起来像:
class ThreadSaveBindingCollection<T> : IEnumerable<T>, IBindingList
{
BindingList<T> collection;
object _lock = new object();
// constructors
public ThreadSaveBindingCollection(IEnumerable<T> initialCollection)
{
if (initialCollection == null)
collection = new BindingList<T>();
else
collection = new BindingList<T>(new List<T>(initialCollection));
}
public ThreadSaveBindingCollection() : this(null)
{
}
// Todo: Implement interfaces using collection to do the work
}
注意我缺少实现接口 IEnumerable 和 IBinding 列表。我计划让该领域collection
处理这些问题,因为它也实现了这些接口。所以我让 Visual Studio 显式地实现接口并用throw new NotImplementedException()
字段collection
实现替换,最终得到如下结果:
现在的问题是
如果集合声称实现 IBindingList,为什么我不能在字段集合上调用方法 AddIndex!?
我无法对几种方法做同样的事情