【发布时间】:2010-07-22 16:16:44
【问题描述】:
我有一个名为 Items 的公共属性,它是一个列表。我想告诉它什么时候被改变。我该怎么做?
例如,如果调用 Items.Add,我希望能够调用 UpdateInnerList。
我该怎么做?
【问题讨论】:
我有一个名为 Items 的公共属性,它是一个列表。我想告诉它什么时候被改变。我该怎么做?
例如,如果调用 Items.Add,我希望能够调用 UpdateInnerList。
我该怎么做?
【问题讨论】:
你能用ObservableCollection吗?
【讨论】:
ObservableCollection 的唯一警告是,如果您需要对正在更改的项目进行操作,.Clear() 方法会引发 changed 事件但参数中没有项目,因此,您可以不知道删除了什么。这显然只有在您关心时才有意义。
如何创建一个 List 子类并覆盖 Add 方法?
void Main()
{
var x=new MySpecialList<string>();
x.Add("hello");
}
class MySpecialList<T>:List<T>
{
public new void Add(T item)
{
//special action here
Console.WriteLine("added "+item);
base.Add(item);
}
}
【讨论】:
List<T>,则永远不会调用这个.Add。
List<int> items = new MySpecialList<int>(); items.Add(5); 没有写入控制台输出。这是使用new 来隐藏基类的方法而不是例如实现IList<T> 而不是您建议的方法的祸根。
它支持CollectionChanged 事件,这应该是您需要的。
【讨论】: