C#可以为数千个对象使用单个EventHandler <eventargs>吗?</eventargs>

时间:2011-07-23 00:10:55

标签: c#

我有一个包含数千个节点的集合。我希望每个节点都能触发Changed()事件来通知容器。

通常,注册活动会创建一个新的EventHandler&lt;&gt;:

Node node = new Node();
node.Changed += new EventHandler<EventArgs>(OnChanged);

这将导致成千上万的EventHandler&lt;&gt;对象。

我想知道是否有可能构建一个EventHandler&lt;&gt;并与数千个节点同时使用:

class Container {
    EventHandler<EventArgs> eventHandler = 
      new EventHandler<EventArgs>(OnChanged);

  void CreateNode() {
    Node node = new Node();
    node.Changed += eventHandler;
  }
}

2 个答案:

答案 0 :(得分:2)

是的,您可以:按照MSDN上的说明引用System.Collections.ObjectModel.ObservableCollection<T>http://msdn.microsoft.com/en-us/library/ms668604.aspx

这是一个示例类,用于通知何时更改属性:

public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string firstName
    public string FirstName
    {
        get { return this.firstName; }
        set 
        {
            if( this.firstName == value )
            {
                return;
            }

            this.firstName = value;
            this.RaisePropertyChanged("FirstName");

        }
    } 

    private void RaisePropertyChanged(string propertyName)
    {
       if( this.PropertyChanged != null )
       {
           this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
       }
    }
}

然后使用System.Collections.ObjectModel.ObservableCollection<T>,因为它会触发以下事件:

`CollectionChanged` - Occurs when an item is added, removed, changed, moved, or the entire list is refreshed

`PropertyChanged` - Also an implementation of INotifyPropertyChanged inteface, which fires when the collection's own properties change.

答案 1 :(得分:1)

绝对。你做了什么应该工作正常。它不适合你吗?

相关问题