我有一个包含数千个节点的集合。我希望每个节点都能触发Changed()事件来通知容器。
通常,注册活动会创建一个新的EventHandler<>:
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;
}
}
答案 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)
绝对。你做了什么应该工作正常。它不适合你吗?