ObservableCollectionCollectionChangedisnohelpfulforWPFMVVM我正在??使用DataGrid并在ViewModel中使用ObservableCollection来绑定privateObservableCollection_stockList;publicObservableCollectionStockList{get{return_stockList;}设置{_stockList=值;OnPropertyChanged("股票清单");StockItem类包含其属性,即DataGrid中的列。DataGrid中有一个名为Amount的列,其值已更改为同一数据网格的Quantity*PriceColumn。我在ViewModel中有一个名为TotalAmount的属性,它是在ObservableCollectionCollectionChanged事件中计算的,如voidOnStockListChanged(objectsender,System.Collections.Specialized.NotifyCollectionChangedEventArgse){当一个新行被添加到带有一些数据的DataGrid时,只有当TextBox绑定到TotalAmount时,这个值才会更新。我希望在数据网格中的金额列发生变化时立即更新TotalAmount的文本框。我怎样才能做到这一点。StockItem类publicclassStockItem:ObservableObject,ISequencedObject{JIMSEntitiesdbContext=newJIMSEntities();publicStockItem(){varqs=dbContext.Stocks.Select(s=>s.StockName);_stocks=newCollectionView(qs.ToArray());_stocks.CurrentChanged+=newEventHandler(Stocks_CurrentChanged);}voidStocks_CurrentChanged(objectsender,EventArgse){if(_stocks.CurrentItem!=null)StockName=_stocks.CurrentItem.ToString();varqs=(frompindbContext.Stockswherep.StockName.Contains(StockName)selectnew{Unit=p.Unit,UnitPrice=p.UnitPrice}).SingleOrDefault();if(qs!=null){Unit=qs.Unit;UnitPrice=(十进制)qs.UnitPrice;}}私有CollectionView_stocks;publicCollectionViewStocks{get{return_stocks;}设置{_stocks=值;OnPropertyChanged("股票");}}私人int_sNo;publicintSNo{get{return_sNo;}设置{_sNo=值;OnPropertyChanged("SNo");}}私有字符串_stockName;公共字符串股票名称{得到{返回_stockName;}设置{_stockName=值;OnPropertyChanged("股票名称");}}私有小数_unitPrice;publicdecimalUnitPrice{get{return_unitPrice;}设置{_unitPrice=值;OnPropertyChanged("单价");OnPropertyChanged("金额");}}私有字符串_unit;publicstringUnit{get{return_unit;}设置{_unit=值;OnPropertyChanged("单位");}}私有十进制_discount;公共十进制折扣{get{return_discount;}设置{_discount=值;OnPropertyChanged("折扣");OnPropertyChanged("金额");}}私人十进制_quantity;publicdecimalQuantity{get{return_quantity;}设置{_quantity=值;OnPropertyChanged("数量");OnPropertyChanged("金额");}}publicdecimalAmount{get{decimaltotal=Quantity*(UnitPrice-(UnitPrice*(Discount/100)));返回总计;}}publicoverridestringToString(){returnStockName;所以,基础上,你所看到的是由于对ObservableCollection的常见错误概念当它包含的对象发生变化时,OC不会通知。它会在发生更改时通知IT(查看INotifyCollectionChanged)-添加、删除项目等时。当OC中包含的StockItem更改时,您会收到要执行的操作的通知。你将不得不做几件事1)确保你的StockItem实现INotifyPropertyChanged(你说你已经这样做了)2)自定义或找到ObservableCollection的实现,当集合中包含的项目发生变化时会收到通知(这里1)您需要为集合中的所有项目订阅PropertyChanged,如果任何项目的Amount发生变化,该值也会重新计算,这有点混乱。某处可能有人会为此写一个实用类...以上是C#教程:ObservableCollectionCollectionChangedisnothelpfulforWPFMVVM全部内容分享,如果对大家有用,需要详细了解C#教程,我希望大家多多关注~本文为网络收集,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
