gpt4 book ai didi

c# - 实现(不处理)CollectionChanged 事件

转载 作者:行者123 更新时间:2023-11-30 20:53:49 24 4
gpt4 key购买 nike

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

到目前为止,我有:

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

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

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

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

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

这样我们就解决了我的问题。我不知道如何实现INotifyCollectionChanged需要的接口(interface)成员。

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

非常感谢这位 C# 新手!

最佳答案

根据 INotifyCollectionChanged ,它需要一个名为 CollectionChanged 的公共(public)事件成员在实现类中。即:

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;
}
}
}

关于c# - 实现(不处理)CollectionChanged 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com