2010-02-02 16 views
0

J'ai une bibliothèque qui retourne une collection comme ceci:Liaison d'un BindingList à une collection

publique IEnumerable Alertes {..}

et je veux transformer cette collection en BindingList pour une utilisation dans l'interface graphique . Quelle est la meilleure façon de garder une BindingList synchronisée avec une collection IEnumerable?

edit: Pour ce problème, supposons que je n'ai aucun contrôle sur la bibliothèque et que l'implémentation actuelle utilise une liste.
Mais je ne veux pas toucher à ce code.

Cette bibliothèque a également une interface agréable avec AddAlert, RemoveAlert, etc. Quelle est la meilleure façon de garder l'interface graphique synchronisée avec tous ces changements?

Répondre

0

En supposant que la classe que vous envelopper exposent les choses comme Insert, vous devriez juste être en mesure de tirer de BindingList<T>, remplaçant quelques méthodes clés - quelque chose comme:

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 
} 

Cela devrait se traduire par les listes de rester synchronisés comme vous les manipulez.

+0

Merci mais ça ne marche pas tout à fait. Si la collection dans la bibliothèque change d'une autre manière (pas via l'utilisateur via l'interface graphique), la liste ne sera pas synchronisée avec la nouvelle collection. – DanDan