2011-12-19 54 views
1

我想在C#中的List泛型類中添加一個事件,以便在添加或刪除新項目的情況下處理列表的變化項目。我創建類並從List類繼承它。由於此類的Add,Insert和Remove方法不能被覆蓋,因此我通過new關鍵字定義了新的Add,Insert和Remove方法,並調用父方法,然後引發我的事件。我用這個類作爲用戶控件中的一個屬性。在設計模式下,當我使用.net開發工作室提供的GUI更改集合時,該事件不起作用。我怎麼解決這個問題?如何在C#中添加更改事件到列表<T>類?

這裏是限定

public class SelectorItemCollection : List<SelectorItem> 
{ 
    public new void Add(SelectorItem Item) 
    { 

     //Call parent method 
     base.Add(Item); 

     //Raise changing event 
     this.OnCollectionChanged(); 

    } 
} 

餘像這樣定義在我的用戶控件類的屬性這樣的類的例子:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    public SelectorItemCollection Items { get; } 

我的期望的狀態,當我更改此項目對話框中,我想從集合類中引發一個不斷變化的事件。

enter image description here

+2

子類'List '很危險,因爲方法('Add'等)不是**'虛擬'。你可以從'Collection '(它們**是''virtual'')派生出來,但答案是正確的,因爲它有你想要的一切,因爲它更容易使用(或派生自)'BindingList ' 。 – 2011-12-19 09:24:05

回答

14

不要推倒重來,使用已經支持這種通知的集合類,像ObservableCollection<T>BindingList<T>(如果您在WPF中使用數據綁定,請使用前者;在Windows窗體中使用後者)。

如果你想實現你自己的,不要從List<T>繼承,因爲它不是爲繼承而設計的。相反,你可以使用Collection<T>作爲你的基類。

2

有在看BindingList<T>代替,這似乎是你要複製的是什麼

1

您可以使用其上有各種事件的System.ComponentModel.BindingList<SelectorItem>

相關問題