PropertyChanged
中的ObservableCollection
事件,但编译器不知道该事件。 CollectionChanged
他知道。 MSDN说ObservableCollection
有事件(https://msdn.microsoft.com/en-us/library/ms653376.aspx)。我做错了什么?
ObservableCollection<int> xx = new ObservableCollection<int>();
xx.PropertyChanged += (s, a) => { };
答案 0 :(得分:3)
PropertyChanged
是protected event
,这就是为什么无法从您的代码中访问它。正如您所知,protected
意味着它只能从自身和派生类中访问。
当谈到ObservableCollection
时,我们有一个事件CollectionChanged
来知道集合何时发生变化(项目被删除或添加)。如果我们需要知道,如果集合的项目已更改,则需要使用自定义实现,例如从此处开始:TrulyObservableCollection
另外,作为@O。 R. Mapper正确地指出,有一种方法可以在不创建派生类型的情况下执行此操作。当ObservableCollection
显式实现INotifyPropertyChanged
时,您必须将实例强制转换为接口,然后您可以访问接口的属性,事件和方法。所以像这样的东西也能起作用(但老实说这很丑):
ObservableCollection<int> xx = new ObservableCollection<int>();
((INotifyPropertyChanged)xx).PropertyChanged += (s, a) => { };