ObservableCollection和CollectionChanged事件为什么在下面的代码中没有触发collectionchanged事件,但是我可以看到我添加到ObservableCollection的新InventoryBTO实例?私有ObservableCollection_inventoryRecords;publicObservableCollectionInventoryRecords{get{return_inventoryRecords;}设置{_inventoryRecords=值;}}privateInventoryBTO_selectedRecord;publicInventoryBTOSelectedRecord{get{return_selectedRecord;}set{if(_selectedRecord!=value){_selectedRecord=value;OnPropertyChanged(newPropertyChangedEventArgs("SelectedRecord"));}}}publicInventoryViewModel(){if(_inventoryRecords==null){InventoryRecords=newObservableCollection();这。InventoryListBTO.GetAllInventoryRecords();}voidInventoryRecords_CollectionChanged(对象发件人,NotifyCollectionChangedEventArgse){}问题是您正在将私有成员分配给您从该方法获得的ObservableCollection的新实例所以发生的事情是,您正在触摸一个集合的事件,然后将该实例吹出并将其替换为您从未连接到的事件处理程序的新实例替换它。这是您可以做的。创建一个继承自ObservableCollection的类并添加一个addrange方法:publicclassRangeObservableCollection:ObservableCollection{privateboolsurpriseEvents=false;publicvoidAddRange(IEnumerableitems){surpriseEvents=true;foreach(variteminitems){base.Add(item);}this.surpressEvents=false;this.OnCollectionChanged(newNotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add,items.ToList()));}protectedoverridevoidOnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgse){if(!thisvents.surpress){base.OnCollectionChanged(e);然后您可以将您的课程更改为:privateRangeObservableCollection_inventoryRecords;publicRangeObservableCollectionInventoryRecords{get{return_inventoryRecords;}设置{_inventoryRecords=值;}}privateInventoryedBTORecords_selectInventoryBTOSelectedRecord{get{return_selectedRecord;}set{if(_selectedRecord!=value){_selectedRecord=value;开PropertyChanged(newPropertyChangedEventArgs("SelectedRecord"));}}}publicInventoryViewModel(){if(_inventoryRecords==null){InventoryRecords=newObservableCollection();this.InventoryRecords.CollectionChanged+=newNotifyCollectionChangedEventHandler(InventoryRecords_CollectionChanged);}this.InventoryRecords.AddRange(InventoryListBTO.GetAllInventoryRecords());}voidInventoryRecords_CollectionChanged(objectsender,NotifyCollectionChangedEventArgse){//e.NewItems将是在AddRange方法中添加的所有项目的IList...}}设置{_inventoryRecords=值;onPropertyChanged(this,"InventoryRecords");}}要不publicObservableCollectionInventoryRecords{get{return_inventoryRecords;}设置{_inventoryRecords=值;OnPropertyChanged(newPropertyChangedEventArgs("InventoryRecords"));}}取决于您的实施以上就是C#学习教程的全部内容:ObservableCollection和CollectionChanged事件分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
