Привязка BindingList к коллекции - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть библиотека, которая возвращает коллекцию, подобную этой:

публичные IEnumerable Alerts {..}

и я хочу превратить эту коллекцию в BindingList для использования в графическом интерфейсе. Каков наилучший способ синхронизации BindingList с коллекцией IEnumerable?

edit: Предположим, что для этой проблемы у меня нет контроля над библиотекой, а фактическая реализация использует List.
Но я не хочу трогать этот код.

Эта библиотека также имеет приятный интерфейс с AddAlert, RemoveAlert и т. Д. Каков наилучший способ синхронизации GUI со всеми этими изменениями?

1 Ответ

0 голосов
/ 02 февраля 2010

Предполагая, что класс, который вы оборачиваете, предоставляет такие вещи, как 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
}

Это должно привести к тому, что списки будут синхронизироваться при манипулировании ими.

...