【问题标题】:C# Custom ObservableCollectionC# 自定义 ObservableCollection
【发布时间】:2011-08-18 02:50:05
【问题描述】:

我想要一个自定义的 observablecollection,以便我可以在添加 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);

    }


}

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

【问题讨论】:

标签: c# observablecollection


【解决方案1】:

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

【讨论】:

  • 干得好。我对 C# 不熟悉 - 忘记了 :base。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多