无法使用 ObservableCollection 中的 PropertyChanged

Joh*_*cht 3 c# wpf

我很困惑。我尝试使用PropertyChanged来自 an 的事件ObservableCollection,但编译器不知道该事件。CollectionChanged他知道。MSDN 表示ObservableCollection有该事件(https://msdn.microsoft.com/en-us/library/ms653376.aspx)。我究竟做错了什么?

ObservableCollection<int> xx = new ObservableCollection<int>();
xx.PropertyChanged += (s, a) => { };
Run Code Online (Sandbox Code Playgroud)

wal*_*her 5

PropertyChanged是 a protected event,这就是为什么您的代码无法访问它的原因。你肯定知道,protected这意味着它只能从自身和派生类访问。

当谈到 时ObservableCollection,我们需要CollectionChanged知道一个事件,即集合何时发生变化(项目被删除或添加)。如果我们需要知道集合的项目是否已更改,则需要使用自定义实现,例如来自此处:TrulyObservableCollection

另外,正如 @OR Mapper 正确指出的那样,有一种方法可以在不创建派生类型的情况下执行此操作。由于显式ObservableCollection实现INotifyPropertyChanged,您必须将实例强制转换为接口,然后才能访问接口的属性、事件和方法。所以像这样的东西也有效(但说实话它很难看):

ObservableCollection<int> xx = new ObservableCollection<int>();
((INotifyPropertyChanged)xx).PropertyChanged += (s, a) => { };
Run Code Online (Sandbox Code Playgroud)