2

我创建了一个扩展基类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# 新手!

4

1 回答 1

4

根据INotifyCollectionChanged,它需要一个被调用的公共事件成员CollectionChanged在实现类中。IE:

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;
        }
    }
}
于 2013-10-29T22:13:29.033 回答