问题标签 [inotifycollectionchanged]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2102 浏览

.net-3.5 - 可观察队列?

有没有人编写过实现 INotifyCollectionChanged 的​​ .Net 通用队列版本,或者是否已经在 .Net 框架深处某个地方隐藏了一个?

0 投票
13 回答
121747 浏览

c# - ObservableCollection 不支持 AddRange 方法,所以我会收到添加的每个项目的通知,除了 INotifyCollectionChanging 呢?

我希望能够添加一个范围并为整个批量更新。

我还希望能够在操作完成之前取消操作(即除了“更改”之外的集合更改)。


相关 Q 哪个 .Net 集合可以一次添加多个对象并获得通知?

0 投票
1 回答
3546 浏览

wpf - ItemsSource + Converter + Treeview 不会更新

这个相当复杂,希望我能把这个说清楚,以便有人帮助我。我有一个对象,我们称之为经理,经理有一组他管理的人,这些人都实现了 IPerson,但不同类型的人有不同的属性。我想在树中显示这个经理,在经理节点下我想显示他正在管理的所有项目,这些项目可以从他管理的人中确定。

所以计划是使用转换器将人员转换为项目列表。这是 XAML:

我的 Person 类实现了 INotifyPropertyChanged,而持有人员的列表实现了 INotifyCollectionChanged。当我设置树视图 ItemsSource 时,此代码效果很好,经理与他们的项目列表一起显示。

但是,当我将新人添加到人员列表时,TreeView 不会更新。当我调试时,我可以看到 CollectionChanged 正在使用 Add 操作和添加的项目触发。CollectionChanged 事件也不为空,所以我知道 UI 正在观看它。但是添加项目时转换器不会执行。

这是保存 IPerson 对象的 List 的 Add 方法:

我是否以某种方式破坏了数据绑定?

我还可以检查哪些其他内容?

转换器只是查看人员列表中的每个项目并确定他们正在处理的项目并将项目名称添加到输出列表中。

0 投票
2 回答
5220 浏览

wpf - WPF ListBox 未绑定到 INotifyCollectionChanged 或 INotifyPropertyChanged 事件

我有以下测试代码:

和 XAML

外部列表框在加载时填充。当扩展器展开时,我然后设置ItemsSource内部列表框的属性(我这样做而不是使用绑定的原因是这个操作很慢,我只希望它在用户选择查看项目时发生)。内部列表框呈现良好,但它实际上并没有订阅CollectionChanged集合上的事件。我已经尝试过使用ICollection而不是IEnumerable添加和INotifyPropertyChanged替换。我实际上可以让它工作的唯一方法是破坏我的类并继承自. 我试图扮演自己的角色而不是使用的理由INotifyCollectionChangedINotifyPropertyChangedSomeCollectionObservableCollection<SomeItem>INotifyCollectionChangedObservableCollection是因为我在真实代码中包装了一个 COM 集合。该集合将通知添加/更改/删除,我正在尝试将这些转换INotify为 WPF 的事件。

希望这足够清楚(为时已晚)。

0 投票
4 回答
3676 浏览

wpf - 如何在 CollectionChanged 上更新 IValueConverter?

这是解释我的问题的基本示例。假设我有

和一个返回数字总和的 IValueConverter。

通常我要做的是将 IValueConverter 更改为 IMultiValueConverter 并将第二个值绑定到 Numbers.Count 像这样

但是我无法使用这种方法来解决我的实际问题。当我没有想到的集合发生变化时,似乎应该有更好的方法来更新绑定。在 Numbers 中添加和删除项目时,让值转换器运行的最佳方法是什么?

0 投票
1 回答
1791 浏览

wpf - 处理 ObservableCollection CollectionChanged 事件

我在 Silverlight 工具包中看到过类似以下的代码,但无法理解如何安全地执行此操作:

如果您从说索引 5 中删除一个项目,这不会将_items索引 5 之后集合中每个项目的当前索引更改为比以前少一个吗?那么,像这段代码那样使用它们的“旧”索引持续删除项目是安全的吗?

我真的很想了解为什么会这样。

有任何想法吗?

0 投票
3 回答
2229 浏览

.net - 为什么没有 ObservableKeyedCollection在 .NET 框架中?

.NET 框架从 3.0 版开始包含ObservableCollection<T>,但为什么没有 ObservableKeyedCollection<TKey, TValue>。

好的,我可以通过从KeyedCollection<TKey,TValue>派生并实现INotifyCollectionChanged接口来实现我自己的集合,但它不是 .NET 框架的一个很好的补充。

0 投票
2 回答
651 浏览

.net - 哪个 NotifyCollectionChangedAction 用于指示项目已更改?

在实施INotifyCollectionChanged和引发CollectionChanged事件时,您必须提供NotifyCollectionChangedAction参数。哪个NotifyCollectionChangedAction用于指示集合中的某个项目已更改,例如在某个项目的值发生更改的情况下?

0 投票
1 回答
1130 浏览

c# - 自定义 ObservableCollection

我有一个关于我创建的类似于 ObserverableCollection 的类的问题。我的类基本上具有与它相同的功能,但是当将项目添加到列表中时,我向它添加了一些自动排序功能。我的问题是我的类实现了接口 INotifyCollectionChanged 以便在集合更改时通知显示我的集合的 ListView(至少这是我认为的)。每次我从集合中添加或删除时,我都会通知集合已更改,但 ListView 不显示更改。那么我是否错过了解释 INotifyCollectionChanged 所做的事情?我应该改用 INotifyPropertyChanged 吗?对这个问题的任何帮助都会很棒!

以下是我课堂上的重要部分:

每当集合更改(项目添加/删除)时,我都会调用 OnCollectionChanged()。我使用 NotifyCollectionChangedAction.Reset 进行所有更改,因为我的集合是 LinkedList 并且 NotifyCollectionChangedEventArgs 构造函数需要一个 LinkedList 通常没有的 NotifyCollectionChangedAction.Add/Remove 标志的索引。

使用集合的我的 ListView 使用 ItemSource 属性上的数据绑定来访问集合。

如果您需要更多代码,请告诉我。

0 投票
4 回答
20331 浏览

c# - 可观察的堆栈和队列

我正在寻找and的INotifyCollectionChanged实现。我可以自己动手,但我不想重新发明轮子。StackQueue