如何实现事件
回答
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. 如何实现自定义事件?
- 3. 如何在iPad上实现dblclick事件
- 4. 如何实现TFileListBox的OnSelectionChanged事件?
- 5. 如何实现事件队列?
- 6. 如何实现事件在PHP
- 7. 如何实现TFrame的OnResizeEnd事件?
- 8. MySQL如何实现事务
- 9. VB6实现与事件
- 10. 定期事件实现
- 11. 实现Core Audio API事件
- 12. 如何在CustomLabel控件中实现点击事件?
- 13. 如何实施事件
- 14. Oracle。如何实现嵌套事务
- 15. 如何在C#中实现抽象事件或接口方法事件?
- 16. 如果事后发现事实,Datomic如何?
- 17. 如何在GreaseMonkey脚本中实现“DOM Ready”事件?
- 18. 事件驱动编程是如何实现的?
- 19. 我将如何去实现基于事件的异步模式?
- 20. 如何为ASP.NET Web应用程序实现事件记录器?
- 21. 如何实现AlertDialog.Builder选定的项目点击事件?
- 22. 如何用普通的javascript实现iOS的触摸事件?
- 23. 如何在Android中实现事件和委托概念?
- 24. 对象事件,它们是如何实现的
- 25. 如何在uiwebview中实现事件处理?
- 26. 如何在python中实现时间事件调度器?
- 27. 如何实现下拉列表改变事件捕捉功能
- 28. 如何实现OnClick事件来调用$ .getJSON函数
- 29. 如何在PHP中实现事件驱动的代码?
- 30. 如何在ViewPager中实现滑动事件以查看Flipper?
当ObservableCollection非常好地完成这项工作时,我没有看到创建自定义Collection类的要点。 – Noldorin 2009-06-26 22:08:45