2014-01-15 3 views
0

У меня есть коллекция в 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 
    } 
} 
+0

В классе A вы могли бы использовать 'ObservableCollection' вместо этого? –

+0

@ AlexandreRondeau Я этого не знаю. Как это сделать? – Yoda

+0

[ObservableCollection ] (http://msdn.microsoft.com/en-us/library/ms668604 (v = vs.110) .aspx) - это то, что вы ищете. Это список , но с событием, когда элементы добавляются или удаляются из коллекции –

ответ

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(); 
    } 
} 
+0

Что такое (s, e)? – Yoda

+2

@Yoda Создание события inline вместо создания отдельного метода событий с отправителем объекта EventArgs e'. –

1

List (или List<T>) не обеспечивает эту функциональность из коробки. Возможно, вам захочется взглянуть на использование ObservableCollection или сверните свой собственный класс, который содержит список, но вызывает события, которые вам нужны.

+0

Я изменил тип коллекции. Но я не знаю, как определить изменение размера в классе B и вызвать метод. – Yoda

+0

вы должны подписаться на событие CollectionChanged коллекции. –

Смежные вопросы