我已添加CollectionChanged eventhandler(onCollectionChanged)到其中一个ObservableCollection属性。
CollectionChanged eventhandler(onCollectionChanged)
ObservableCollection
我发现该onCollectionChanged方法仅在添加项目或将项目移除到集合中时才被调用,而在集合项被编辑时不被调用。
onCollectionChanged
我想知道如何在单个集合中发送新添加,删除和编辑的项目的列表/集合。
谢谢。
您必须为PropertyChanged每个项目(必须实现INotifyPropertyChanged)添加一个侦听器,以获取有关在可观察列表中编辑对象的通知。
PropertyChanged
INotifyPropertyChanged
public ObservableCollection<Item> Names { get; set; } public List<Item> ModifiedItems { get; set; } public ViewModel() { this.ModifiedItems = new List<Item>(); this.Names = new ObservableCollection<Item>(); this.Names.CollectionChanged += this.OnCollectionChanged; } void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { foreach(Item newItem in e.NewItems) { ModifiedItems.Add(newItem); //Add listener for each item on PropertyChanged event newItem.PropertyChanged += this.OnItemPropertyChanged; } } if (e.OldItems != null) { foreach(Item oldItem in e.OldItems) { ModifiedItems.Add(oldItem); oldItem.PropertyChanged -= this.OnItemPropertyChanged; } } } void OnItemPropertyChanged(object sender, PropertyChangedEventArgs e) { Item item = sender as Item; if(item != null) ModifiedItems.Add(item); }
也许您必须检查ModifedItems-List中是否已经存在某些项目(使用List的方法Contains(object obj)),并且仅在该方法的结果为 false时 添加一个新项目。
该类Item必须实现INotifyPropertyChanged。查看此示例以了解操作方法。正如罗伯特·罗斯尼(Robert Rossney)所说,IEditableObject如果您有此要求,您也可以使用。
Item
IEditableObject