IBindingList を実装するカスタム コレクションを作成して、サード パーティのカスタム コントロールにバインドできるようにする必要があります。私が抱えているもう 1 つの問題は、複数のスレッドからアイテムを同時に手動で挿入するため、そのコレクションをスレッド セーフにしなければならないことです。
とにかく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 を呼び出せないのはなぜですか?
いくつかの方法で同じことを行うことができません