我创建了一个扩展基类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!
答案 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;
}
}
}