日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件

發布時間:2023/12/4 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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


事件訂閱

可以用如下方法訂閱事件:

this.StudentList.CollectionChanged += StudentList_OnCollectionChanged; 或 StudentList.CollectionChanged += new NotifyCollectionChangedEventHandler(StudentList_OnCollectionChanged);

事件方法:

public void StudentList_OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e){MessageBox.Show("當前觸發的事件是:"+?e.Action.ToString());}

集合定義:

private ItemsChangeObservableCollection<Students> studentList;public ItemsChangeObservableCollection<Students> StudentList{get{return studentList;}set{studentList?=?value;}}

04


效果演示

源碼下載

網盤下載鏈接:https://pan.baidu.com/s/1TD2BT5hiT-z-_7Z2Bn3PVQ

提取碼:添加小編微信獲取

技術群:添加小編微信并備注進群

小編微信:mm1552923 ??

公眾號:dotNet編程大全? ? ??

總結

以上是生活随笔為你收集整理的C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。