实现(不处理)CollectionChanged事件

时间:2013-10-29 22:05:56

标签: c# .net

我创建了一个扩展基类ListView.ColumnHeaderCollection的类(在System.Windows.Forms中找到),我希望能够通过INotifyCollectionChanged收到关于何时更改集合的通知。

到目前为止,我有:

public class MyCollection : ListView.ColumnHeaderCollection, INotifyCollectionChanged { ... }

在我的初始化方法中,我正在为委托分配我自己的方法OnCollectionChanged()

UserSettings.Instance.Columns.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(OnCollectionChanged);

对于那些好奇的人,我的代表看起来像:

public void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    Settings_Save();
}

所以我们解决了我的问题。我不知道如何实现INotifyCollectionChanged所需的接口成员。

'_Namespace_.MyCollection' does not implement interface member 'System.Collections.Specialized.INotifyCollectionChanged.CollectionChanged'

非常感谢C#newbie!

1 个答案:

答案 0 :(得分:4)

根据INotifyCollectionChanged,它要求名为CollectionChanged的公共事件成员在实现类中。即:

public class MyCollection : INotifyCollectionChanged
{
    public event NotifyCollectionChangedEventHandler CollectionChanged;
    // ...
}

编辑:使用new关键字覆盖非虚拟媒体资源:

public class MyListView : ListView
{

    public new MyCollection Columns { get; set; }
    //...

}

但是你必须要小心。如果引用类型引用ListView.Columns,则它将是与MyCollection.Columns不同的集合,并导致意外行为。当使用new覆盖基本属性时,您应该设置/获取基本属性,这样可以保留集合的完整性,即:

public class MyListView : ListView
{
    public new MyCollection Columns
    {
        get
        {
            return base.Columns as MyCollection;
        }
        set
        {
            base.Columns = value;
        }
    }
}