问题陈述
设想一个 ObservableCollection,其中元素实现 INotifyPropertyChanged,并且集合本身会监控这些元素的任何更改。尽管存在 ObservableCollection
解决方案
ObservableCollectionEx 类
建议的解决方案引入了 ObservableCollectionEx
用法
ObservableCollectionEx
<code class="language-csharp">ObservableCollectionEx<Element> collection = new ObservableCollectionEx<Element>(); ((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>
注意事项
虽然此实现会在元素属性更改时触发集合的 PropertyChanged 事件,但这可能会造成混淆。因此,可以引入一个专门用于此类更改的附加事件。
此外,BCL 中的 ObservableCollection
<code class="language-csharp">((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>
需要注意的是,取消订阅 PropertyChanged 需要将事件处理程序设置为 null:
<code class="language-csharp">collection.PropertyChanged -= (s, e) => { Trace.WriteLine("Changed " + e.PropertyName); };</code>
以上是如何创建一个 ObservableCollection 来监视其元素属性的变化?的详细内容。更多信息请关注PHP中文网其他相关文章!