实现CollectionChanged
我已添加CollectionChanged
eventhandler(onCollectionChanged)到其中一个ObservableCollection
属性。
我发现该onCollectionChanged
方法仅在添加项目或将项目移除到集合中时才被调用,而在集合项被编辑时不被调用。
我想知道如何在单个集合中发送新添加,删除和编辑的项目的列表/集合。
谢谢。
回答:
您必须为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)),并且仅在该方法的结果为 添加一个新项目。
该类Item
必须实现INotifyPropertyChanged
。查看此示例以了解操作方法。正如罗伯特·罗斯尼(Robert
Rossney)所说,IEditableObject
如果您有此要求,您也可以使用。
以上是 实现CollectionChanged 的全部内容, 来源链接: utcz.com/qa/415604.html