您如何看待这个封装集合的解决方案,并且能够知道何时添加/删除它。
如何在xml描述中添加clicable链接?
// Why does DoNotExposeGenericLists recommend that I expose Collection instead of List? by David Kean"
// http://blogs.msdn.com/b/codeanalysis/archive/2006/04/27/585476.aspx
public class CollectionEx<T> : Collection<T>
{
public event EventHandler ItemAdded;
public event EventHandler ItemRemoved;
public CollectionEx()//:base()
{
}
protected override void InsertItem(int index, T item)
{
base.InsertItem(index, item);
OnSectionAdded(EventArgs.Empty);
}
protected override void RemoveItem(int index)
{
base.RemoveItem(index);
OnSectionRemoved(EventArgs.Empty);
}
public new void Add(T item)
{
base.Add(item);
OnSectionAdded(EventArgs.Empty);
}
public new bool Remove(T item)
{
bool ok = base.Remove(item);
OnSectionRemoved(EventArgs.Empty);
return ok;
}
protected override void ClearItems()
{
base.ClearItems();
}
protected virtual void OnSectionRemoved(EventArgs e)
{
EventHandler handler = this.ItemRemoved;
if (handler != null)
{
handler(this, e);
}
}
protected virtual void OnSectionAdded(EventArgs e)
{
EventHandler handler = this.ItemAdded;
if (handler != null)
{
handler(this, e);
}
}
}
答案 0 :(得分:8)
您可以使用ObservableCollection<T>
来实现此目的。不需要自己写。
此外:当继承Collection<T>
时,它足以覆盖受保护的虚拟方法。所有其他公共方法都会调用它们
如果您按照自己的方式另外隐藏非虚拟事件,则可能会多次触发事件(在您的情况下,清除集合时,不会触发任何事件)。
答案 1 :(得分:2)
已存在类似的内容,请查看ObservableCollection<T>.
答案 2 :(得分:1)
.NET 4.0附带ObservableCollection。 CollectionChanged
事件提供有关已修改,添加或删除内容的详细信息。