2010-02-02 4 views
0

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

IEnumerable Alerts общественности {..}

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

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

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

ответ

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 
} 

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

+0

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

Смежные вопросы