0

次のようなコレクションを返すライブラリがあります。

public IEnumerable Alerts { .. }

そして、このコレクションを GUI で使用する BindingList に変換したいと考えています。BindingList を IEnumerable コレクションと同期させる最善の方法は何ですか?

編集:この問題については、ライブラリを制御できず、実際の実装ではリストを使用していると仮定します。
しかし、このコードには触れたくありません。

このライブラリには、AddAlert、RemoveAlert などとの優れたインターフェイスもあります。GUI をこれらすべての変更と同期させる最善の方法は何ですか?

4

1 に答える 1

0

ラップしているクラスが のようなものを公開していると仮定すると、いくつかの主要なメソッドをオーバーライドして、Insertから派生できるはずです-次のようなもの:BindingList<T>

class MyList<T> : BindingList<T>
{
    private readonly Foo<T> wrapped;
    public MyList(Foo<T> wrapped)
        : base(new List<T>(wrapped.Items))
    {
        this.wrapped = wrapped;
    }
    protected override void InsertItem(int index, T item)
    {
        wrapped.Insert(index, item);
        base.InsertItem(index, item);            
    }
    protected override void RemoveItem(int index)
    {
        wrapped.Remove(this[index]);
        base.RemoveItem(index);
    }
    protected override void ClearItems()
    {
        wrapped.Clear();
        base.ClearItems();
    }
    // possibly also SetItem
}

これにより、リストを操作してもリストの同期が維持されるはずです。

于 2010-02-02T16:39:39.347 に答える