gpt4 book ai didi

c# - WPF CollectionChanged 事件 OldItems.Count

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:02 27 4
gpt4 key购买 nike

我有一个 ObservableCollection 并附加到 CollectionChanged 事件:

void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
for (int i = 0; i < e.NewItems.Count; i++)
{
int id = -1 * i;
DocumentWatchList d = (DocumentWatchList)e.NewItems[i];
d.UID = id;
_dataDc.DocumentWatchLists.InsertOnSubmit(d);
}
}
else if (e.Action == NotifyCollectionChangedAction.Remove)
{
for (int i = 0; i < e.OldItems.Count; i++)
{
DocumentWatchList d = (DocumentWatchList)e.OldItems[i];
_dataDc.DocumentWatchLists.DeleteOnSubmit(d);
}
}
_dataDc.SubmitChanges();
}

我的集合绑定(bind)到数据网格,并按预期调用了 View 模型代码(上方)。当我选择多行并点击删除时,我希望 OldItems 集合将包含我选择的行数 (n)。然而,实际发生的是该事件被调用 n 次,每次 OldItems 集合计数为 1。那么在什么情况下 OldItems 集合包含超过 1 个项目?这种行为是来自数据网格控件,还是 ObservableCollection.CollectionChanged 的​​工作方式?

最佳答案

出于某种原因,ObservableCollection 不支持包含多个项目的 NotifyCollectionChanged 事件。

你可以这样做:

OnCollectionChanged(
new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Remove, singleItem));

但不是这个:(你会得到一个 NotSupportedException)

 OnCollectionChanged(
new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Remove, multipleItems));

我想不出任何 e.OldItems.Count 会大于 0 的情况。

Here是一篇关于它的好文章,其中有人出于性能目的实际实现了对多个项目的处理。

关于c# - WPF CollectionChanged 事件 OldItems.Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973119/

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