C # Custom ObservableCollection - PullRequest
       12

C # Custom ObservableCollection

2 голосов
/ 17 августа 2011

Мне нужна настраиваемая наблюдаемая коллекция, чтобы я мог отловить при добавлении элемента типа MyObj и вызвать MyObj.DoCalc () для него перед его добавлением в элементы. Я также хочу иметь возможность передавать список конструктору myCustomCollection, как и базовый класс, чтобы он устанавливал элементы в этот список.

public class MyObservableCollection : ObservableCollection<MyObj>
{

    protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
        {

            // perform calculation
        }
        base.OnCollectionChanged(e);

    }


}

Это насколько я понял. Я не уверен, как переопределить конструктор и элементы только для чтения, поэтому я не знаю, как установить это в переданный список. Заранее спасибо.

1 Ответ

3 голосов
/ 17 августа 2011

Для вашего первого вопроса, NotifyCollectionChangedEventArgs имеет свойство NewItems.Просто зациклитесь на этом.

if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)`
{
    foreach(var item in e.NewItems.Cast<MyObj>())
       item.DoCalc();
}

Я не уверен, какой порядок это называется.

Для вашего второго вопроса вот код, который вам нужен:

public MyObservableCollection(IEnumerable<MyObj> items) : base(items)
{
}
...