Привязка BindingList к коллекции

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

общедоступные оповещения IEnumerable { .. }

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

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

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


person DanDan    schedule 02.02.2010    source источник


Ответы (1)


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

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

person Marc Gravell    schedule 02.02.2010
comment
Спасибо, но это не совсем работает. Если коллекция в библиотеке изменится каким-либо другим образом (не через пользователя через графический интерфейс), список не будет синхронизироваться с новой коллекцией. - person DanDan; 02.02.2010