C#Custom ObservableCollection

时间:2011-08-17 18:43:27

标签: c# observablecollection

我想要一个自定义的observablecollection,以便我可以在添加MyObj类型的项目时捕获它,并在它添加到Items之前调用它上面的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);

    }


}

就我而言。我不确定如何覆盖构造函数,而Items是只读的,所以我不知道如何将它设置为传入的列表。提前谢谢。

1 个答案:

答案 0 :(得分:3)

对于您的第一个问题,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)
{
}