如何在 WPF(MVVM) 中的 ObservableCollection 中获取编辑的值


 public class PricingGrpModel
 {
    public string Name { get; set; }
    public string Description { get; set; }     
 }
 private ObservableCollection<PricingGrpModel> _myCollection;    
 public ObservableCollection<PricingGrpModel> myCollection
 {
  get { return _myCollection; }
  set { _myCollection= value; OnPropertyChanged("myCollection"); }
 }
myCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(myCollection_CollectionChanged);   
void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    try
    {
        switch (e.Action)
        {                 
            case NotifyCollectionChangedAction.Add:                       
                break;
            case NotifyCollectionChangedAction.Remove:
                break;
        }
    }
    catch(Exception exception)
    {              
    }
}  

我已将"myCollection"ObservableCollection绑定到DataGrid的ItemsSource。添加或删除行时触发的集合更改事件。但是我无法跟踪现有行值的变化。当可观察集合中的项目属性发生更改时,如何获得通知?

您可以使用NotifyCollectionChangedEventArgsNewItemsOldItems属性。

当您调用 ObservableCollection.Remove() 时,删除的项将出现在 OldItems 属性中:

void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.OldItems != null)
    {
         foreach (var removedItem in e.OldItems)
         {
         }
    }
}

唯一的问题是,当您调用ObservableCollection.Clear()方法时,OldItems 属性为 null。

如果要访问还清除的项目,则必须通过继承 ObservableCollection 并覆盖受 RemoveItem 保护的方法来创建自定义类。当您调用 ObservableCollection.Clear() 时,也会调用 RemoveItem 方法。你可以从这个答案中使用我的扩展可观察集合:触发器 InotifyPropertyChanged/CollectionChanged on ObservableCollection

您无法通过 CollectionChanged 事件直接跟踪项目更改。您可以做的是:在 ObservableCollection 中每个项的CollectionChanged事件处理程序中向PricingGrpModel.PropertyChanged添加和删除事件处理程序。

最新更新