gpt4 book ai didi

c# - 实现 CollectionChanged

转载 作者:IT王子 更新时间:2023-10-29 04:25:44 24 4
gpt4 key购买 nike

我已将 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)),并且只有在该方法的结果为 false .

Item 类必须实现 INotifyPropertyChanged。看这个example知道怎么做。正如 Robert Rossney 所说,如果您有此要求,您也可以使用 IEditableObject 来实现。

关于c# - 实现 CollectionChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4588359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com