Wpf中ObservableCollection集合赋值遇到的坑

发布时间:2026/7/31 5:32:07
Wpf中ObservableCollection集合赋值遇到的坑 在Wpf中使用ObservableCollection定义数组数据时由于该类型变量已继承 INotifyCollectionChanged所以无需重写get,set属性只需声明get,set属性即可实现变量在改变时通知到界面所以常常被用来定义需要Datagrid控件显示的内容但是这里有个细节要注意如果直接对ObservableCollection变量通过等号()赋值界面是不会同步触发数据修改的。举例如下声明变量/// summary/// 原始检测数据/// /summarypublicObservableCollectionMyYoloDataMyDetectData{get;set;}newObservableCollectionMyYoloData();/// summary/// 检测数据汇总/// /summarypublicObservableCollectionDetectResultMydetectDataSummary{get;set;}newObservableCollectionDetectResult();正确方法使用如下代码1对变量进行赋值界面会同步更新MydetectDataSummary.Clear();ObservableCollectionDetectResultMydetectDataSummaryTempCMain.Instacn.SummarryDetectData(MyDetectData);for(inti0;iMydetectDataSummaryTemp.Count;i){MydetectDataSummary.Add(MydetectDataSummaryTemp[i]);}错误方法使用如下代码2进行赋值界面不会同步更新MydetectDataSummaryCMain.Instacn.SummarryDetectData(MyDetectData);原因分析1.代码1不会改变变量的对象改变的是集合的内容会触发INotifyCollectionChanged事件从而界面改变2.代码2会改变变量的实例对象直接换了容器界面绑定的是旧容器旧的没有发生变化所以界面不会更新对策1.使用代码12.将ObservableCollection类别换成List数组同时需继承INotifyPropertieChanged,重写getset属性即可