2010-02-02 167 views
0

我有一個返回這樣的集合庫:綁定的BindingList到集合

公共IEnumerable的通知{..}

,我希望把這個收集到的BindingList使用的GUI 。保持BindingList與IEnumerable集合同步的最佳方式是什麼?

編輯:對於這個問題,假設我沒有控制庫和實際的實現使用列表。
但我不想觸摸這段代碼。

這個庫也有一個與AddAlert,RemoveAlert等一個很好的界面什麼是保持與所有這些變化的GUI同步的最佳方式是什麼?

回答

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

謝謝,但它不是很有效。如果庫中的集合以某種其他方式更改(而不是通過GUI通過用戶),則列表框將不會與新集合同步。 – DanDan 2010-02-02 16:58:07