实现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

回到顶部