ObservableCollection继承了INotifyPropertyChanged接口,在属性变更时可以通知界面,当我把ObservableCollection集合绑定到界面的DataGrid后,我希望在界面修改表格数值后,可以触发一个 事件来验证我界面设定数据的有效性,但是对于集合的添加、删除只会触发集合的get属性,值重置不会触发集合的get、set属性,这时候我们就需要扩展ObservableCollection集合.

代码如下:重写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 changed
            base.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
 

可以用如下方法订阅事件:

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
                return studentList;
                studentList = value;
  

网盘下载链接:https://pan.baidu.com/s/1TD2BT5hiT-z-_7Z2Bn3PVQ

提取码:添加小编微信获取

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全      

01—概述 ObservableCollection继承了INotifyPropertyChanged接口,在属性变更时可以通知界面,当我把ObservableCollection... 区别它们,最简单的方法就是看看他们继承的类和接口,还有它们的方法。(学习有技巧,会让你事半功倍,效率提升。) ObservableCollection比较简单,继承了Collection, INotifyCollectionChanged, INotifyPropertyChanged Collection:为泛型集合提供基类。code INotifyCollectionChanged:将集合的动态更改通知给侦听器,例如,什么时
在C/S架构中,常常会遇到动态更新数据,在不同的窗体中进行数据的动态操作,数据往往不能达到实时更新效果,而想要实现这一功能,C#中为我们提供了ObservableCollection类可以在添加删除项目或刷新列表时提供属性变更通知,下面来总结一下ObservableCollection的使用。首先定义一个GlobalModel类,类中声明一个静态的动态集合,这样这个动态集合可以作为全局的变量进行使用: public class GlobalModel : ObservableObject
本章讲述:ObservableCollection集合 泛型查找功能 1.使用Any方法查询 //在数组中查找serialNum和FrameIndex为指定条件的项,只要数组中有一项符合即返回true ObservableCollection<ImageInfo> lstData = new ObservableCollection<Im...
Unity-ML-Agents--Learning-Environment-Design-Agents.md-代码解读(1) 1.Agent.CollectObservations() 2.Observable Fields and Properties 3.One-hot encoding categorical information
Unity-ML-Agents-代码解读-Making a New Learning Environment 1.Initialization and Resetting the Agent 2. Observing the Environment 3.Taking Actions and Assigning Rewards 如果需要集合中的元素核实删除添加的信息,就可以使用ObservableCollection类. ObservableCollection类表示一个动态数据集合,在添加项,移除项或刷新整个列表时,刺激和将提供通知. 命名空间:System.Collections.ObjectModle 语法:public class ObservableCollection:Co
可以使用 Split() 方法将字符串转换为字符串数组,然后使用 ObservableCollection 构造函数将数组转换为 ObservableCollection。 ```csharp string str = "apple,banana,orange"; ObservableCollection<string> collection = new ObservableCollection<string>(str.Split(',')); 这样就可以将字符串 "apple,banana,orange" 转换为包含三个元素的 ObservableCollection,分别是 "apple"、"banana" 和 "orange"。注意,这种方法需要在 UI 线程中执行,因为 ObservableCollection 是用于在 WPF 和 UWP 等框架中绑定到 UI 元素的。如果在其他线程中使用 ObservableCollection,可能会导致线程错误。