如何實現事件
回答
List<T>
沒有通知支持。你可以看看BindingList<T>
,它有事件 - 或Collection<T>
,它可以通過覆蓋方法繼承。
如果你想暴露在Foo
水平時,或許有點像下面 - 但它可能更容易離開就行了:
class Foo{
public event EventHandler ListChanged;
private readonly BindingList<string> list;
public Foo() {
list = new BindingList<string>();
list.ListChanged += list_ListChanged;
}
void list_ListChanged(object sender, ListChangedEventArgs e) {
EventHandler handler = ListChanged;
if (handler != null) handler(this, EventArgs.Empty);
}
public IList<string> SomeCollection {get {return list;}}
}
你可以看看this tutorial製作自己的自定義事件。
您可以通過使用ObservableCollection而不是List來做到這一點。
看看(分別在System.ComponentModel
和System.Collections.ObjectModel
命名空間)的BindingList
和ObservableCollection
類 - 無論是一個人應該爲你做的工作做好。
請注意,這兩個類通常提供相同的功能,但它們確實有點不同。 BindingList
通常更適合數據綁定/ UI目的(因此它的名稱),因爲它允許選項取消更新等。然而,ObservableCollection
可能更適合您的情況,因爲您只是希望收到變更通知(看起來),並且該類純粹是從這個角度設計的。它們存在於非常不同的命名空間中的事實對此有所提示。如果您需要關於相似性和差異的確切細節,我建議您檢查鏈接的MSDN文檔。
(回答進行評論;還 - 是不是在3.0的ObservableCollection
MSDN似乎暗示ObservableCollection自.NET 2.0以來一直存在。在功能方面,你說BindingList提供ObservableCollection所做的一切(以及更多)基本上是正確的。但有一點需要注意的是,ObservableCollection實現了INotifyCollectionChanged和INotifyPropertyChanged,在某些情況下這很有用。我也相信WPF在少數情況下需要ObservableCollection。正如我指出的那樣,預期用法也略有不同,儘管這是一件小事。 – Noldorin 2009-06-26 22:37:38
基本一...
這裏是一個很好的link
public class Foo
{
private List<string> _SomeCollection;
public event EventHandler Added;
public void Add(string item)
{
SomCollection.Add(item);
OnAdd();
}
private void OnAdd()
{
if (Added != null)
{
Added.Invoke(this, EventArgs.Empty);
}
}
}
- 1. 如何實現OnTouch事件
- 2. 如何在TFrame中實現OnKeyDown事件
- 3. 如何實現事件隊列?
- 4. 如何用QRunnable實現事件循環?
- 5. 如何實現TFrame的OnResizeEnd事件?
- 6. 如何實現事件在PHP
- 7. 如何實現TFileListBox的OnSelectionChanged事件?
- 8. 如何在ScrollView中實現onScroll事件?
- 9. 如何實現自定義事件?
- 10. GeoLocation,然後C#事件 - 如何實現
- 11. jQuery的:動態事件如何實現
- 12. 如何實現事件系統
- 13. 如何在vb6中實現事件?
- 14. MySQL如何實現事務
- 15. 我如何在Ruby中實現事實?
- 16. VB6實現與事件
- 17. VB.NET類實現事件
- 18. 實現Core Audio API事件
- 19. 實現各種onclick事件
- 20. 定期事件實現
- 21. 如何在CustomLabel控件中實現點擊事件?
- 22. OnTouch事件如何表現?
- 23. 如何實施事件
- 24. 如何實現可序列化事務?
- 25. 如何在故事板中實現RTPagingViewController?
- 26. Oracle。如何實現嵌套事務
- 27. 如何在C#中實現抽象事件或接口方法事件?
- 28. 文件如何實現?
- 29. 如果事後發現事實,Datomic如何?
- 30. 如何從JS事件實現Node-Red部署調用
當ObservableCollection非常好地完成這項工作時,我沒有看到創建自定義Collection類的要點。 – Noldorin 2009-06-26 22:08:45