我想要一个自定义的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是只读的,所以我不知道如何将它设置为传入的列表。提前谢谢。
答案 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)
{
}