我在类中有一个名为cart的静态数组列表,有没有办法实现其他类使用的事件监听器? 我是c#的新手,试图了解PropertyChangedEventHandler并没有成功。 arraylist和属性初始化如下:
session
编辑:
通过隐藏基本方法改变@KMC代码以使用List:
private static ArrayList cartList = new ArrayList();
public static ArrayList CartList
{
get { return cartList; }
set
{
cartList = value;
}
}
答案 0 :(得分:2)
ArrayList
中的元素数量发生变化,任何元素发生变化时,都无法收到通知。
ArrayList
和.Net Framework中的大多数其他标准集合,如List<T>
,Dictionary
和数组(WPF中的ObservableCollection等专门类除外)不提供项目通知添加/移除。您可以通过查看相应类的MSDN条目来查看它,并查看它是否实现了INotifyCollectionChanged
和/或INotifyPropertyChanged
。即ArrayList仅实现IList, ICollection, IEnumerable, ICloneable
而没有通知接口。
如果您需要此类更改的通知,则应创建自己的类并发出此类通知,或使用ObservableCollection
。
附注:请考虑使用List<T>
代替非通用ArrayList
- ArrayList vs List<> in C#。
答案 1 :(得分:2)
ArrayList类型是可扩展的。你可以覆盖添加和删除方法并触发一些事件。
for ex)
public class NewArrayList : ArrayList
{
public event EventHandler Change;
public override int Add(object value)
{
var result = base.Add(value);
this.OnChange();
return result;
}
public override void Remove(object obj)
{
base.Remove(obj);
this.OnChange();
}
protected void OnChange()
{
if (this.Change != null)
{
this.Change(this, new EventArgs() { });
}
}
}
public static class program
{
static void Main(string[] args)
{
var list = new NewArrayList();
list.Change += delegate (object sender, EventArgs arg) {
Console.WriteLine("collect changed {0}", list.Count);
};
list.Add(1);
list.Add(2);
list.Remove(2);
}
}
由于ArrayList需要发送某种类型的消息(事件),而且我不确定谁会收到它,我会留给你。