- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 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/
我有一个 ObservableCollection 并附加到 CollectionChanged 事件: void OnCollectionChanged(object sender, NotifyC
这里有一些东西确实让我措手不及。 我有一个 T 的 ObservableCollection,其中充满了项目。我还有一个附加到 CollectionChanged 事件的事件处理程序。 当您清除集合时
我是 C# 和 OOP 的新手,只是一个关于 NotifyCollectionChangedEventArgs 的问题。我不明白为什么它有 NewItems 和 OldItems 而不是 NewIte
我在使用 DiffUtil.ItemCallback 库时遇到问题,其中列表项的旧状态最终会丢失并导致 oldTask 具有相同的值作为newTask。 当我选中/取消选中 ListAdapter 中
仅供引用,我并不是在寻找“修复”,而是在寻找解释和讨论,这可能有助于更多地理解像这些看似愚蠢的事情是如何工作的。 当我意识到某个地方的某个列表没有正确更新时,我正在从事这个更大的项目。仔细观察,项目正
我是一名优秀的程序员,十分优秀!