C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件
生活随笔
收集整理的這篇文章主要介紹了
C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
01
—
概述
? ? ?ObservableCollection繼承了INotifyPropertyChanged接口,在屬性變更時可以通知界面,當我把ObservableCollection集合綁定到界面的DataGrid后,我希望在界面修改表格數值后,可以觸發一個 事件來驗證我界面設定數據的有效性,但是對于集合的添加、刪除只會觸發集合的get屬性,值重置不會觸發集合的get、set屬性,這時候我們就需要擴展ObservableCollection集合.
02
—
集合擴展
代碼如下:重寫OnCollectionChanged方法,使得集合改變(增添、刪除、改變)時擁有屬性變更事件
using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using DevExpress.Xpo;namespace Caliburn.Micro.Hello {public class ItemsChangeObservableCollection<T> :System.Collections.ObjectModel.ObservableCollection<T> where T : INotifyPropertyChanged{protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) {if (e.Action == NotifyCollectionChangedAction.Add){RegisterPropertyChanged(e.NewItems);}else if (e.Action == NotifyCollectionChangedAction.Remove){UnRegisterPropertyChanged(e.OldItems);}else if (e.Action == NotifyCollectionChangedAction.Replace){UnRegisterPropertyChanged(e.OldItems);RegisterPropertyChanged(e.NewItems);}base.OnCollectionChanged(e);}protected override void ClearItems() {UnRegisterPropertyChanged(this);base.ClearItems();}private void RegisterPropertyChanged(IList items) {foreach (INotifyPropertyChanged item in items){if (item != null){item.PropertyChanged += new PropertyChangedEventHandler(item_PropertyChanged);}}}private void UnRegisterPropertyChanged(IList items) {foreach (INotifyPropertyChanged item in items){if (item != null){item.PropertyChanged -= new PropertyChangedEventHandler(item_PropertyChanged);}}}private void item_PropertyChanged(object sender, PropertyChangedEventArgs e) {//launch an event Reset with name of property changedbase.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));}} }03
—
事件訂閱
可以用如下方法訂閱事件:
事件方法:
集合定義:
04
—
效果演示
源碼下載
網盤下載鏈接:https://pan.baidu.com/s/1TD2BT5hiT-z-_7Z2Bn3PVQ
提取碼:添加小編微信獲取
技術群:添加小編微信并備注進群
小編微信:mm1552923 ??
公眾號:dotNet編程大全? ? ??
總結
以上是生活随笔為你收集整理的C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用OpenTelemetry搭配Zip
- 下一篇: 2021技术文大盘点 | 打包过去,