如何订阅事件监听器到集合?

时间:2014-01-15 01:41:35

标签: c# events collections

我在class A中有一个集合:

class A{
  public static List<A> list = new List<A>();
}

我想在class B中插入一个代码来监控来自class A的集合,如果此集合更改其大小,则会调用方法:collectionSizeChanged()

class B{
......
   public void collectionSizeChanged(){
    // some code modifing private objects in class B
  }
}

2 个答案:

答案 0 :(得分:3)

列表不会公开任何事件,但您可以使用ObservableCollection<T>来完成这项工作。

var observableCollection = new ObservableCollection<string>();
observableCollection.CollectionChanged += (s, e) => 
    {
        doStuff();
    }

class A
{
     public static ObservableCollection<A> list = new ObservableCollection<A>();
}

class B
{
    public void StartListening()
    {
        A.list.CollectionChanged += collectionSizeChanged;
    }
    public void StopListening()
    {
        A.list.CollectionChanged -= collectionSizeChanged;
    }

    private void collectionSizeChange(object sender, NotifyCollectionChangedEventArgs eventArgs)
    {
        doStuff();
    }
}

答案 1 :(得分:1)

List(或List<T>)未提供开箱即用的功能。您可能希望改为使用ObservableCollection或者滚动自己的包含列表的类,但会引发您需要的事件。