问题标签 [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 投票
3 回答
820 浏览

c# - INotifyCollectionChanged - 它多久触发一次(以及它们如何使其如此高效/快速)?

基本上,我想知道它在这里的实际效率如何。

示例代码:

这不会每次都触发 CollectionChanged 事件,导致 UI 每次都必须刷新吗?还是这样做是为了等待 GetItems 函数完成?

基本上,WPF 似乎处理得很好,我想知道他们是如何做到的。

0 投票
2 回答
542 浏览

c# - ObservableCollections 和 C# 中的属性更改

我正在使用Job我定义的类的可观察集合。我已经绑定了一个方法来处理INotifyCollectionChanged事件。MSDN 告诉我这INotifyCollectionChanged是一个“动态更改的侦听器,例如添加和删除项目或刷新整个列表时”,但我想侦听集合中任何作业类的属性更改,是有一个事件处理程序?我知道有一个INotifyPropertyChanged界面,但我希望它适用于集合。

编辑:

老实说,我对此感到困惑,所以我应该为我正在做的事情提供更多背景信息,以便我得到答案。我在“工作”类中有这个属性:

这个作业类实际上继承自 Telerik 控件的约会类(恰好实现了 INotifyPropertyChanged)。从 Telerik 文档中,我也得到了上面的代码(减去消息框)。现在,当我更改此布尔值 ONCE 时,该消息框行被执行了 5 次。

任何帮助表示赞赏!

编辑 2: IsPlanned 的路径已更改:

这些都来自不同的类,这些类用于为我的自定义拖放行为(来自列表框)定义覆盖。

0 投票
0 回答
1178 浏览

.net - 添加的项目未出现在给定索引“2”处

当我尝试从我从 INotifyCollectionChanged 继承的 Dictionary 中删除项目时,我遇到了这个异常。当我第一次删除时,我可以删除该项目,之后如果我尝试删除此异常,但当我尝试查看集合时,该项目位于该位置(在这种情况下为 2)。这里可能有什么问题。在异常发生的地方添加代码片段

CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, new KeyValuePair(key, value), i));

0 投票
2 回答
146 浏览

c# - 取消订阅存储在附加属性中的集合的 CollectionChanged 事件

好的,所以我有一个附加属性(在静态类中声明),它将属性附加INotifyCollectionChanged到对象。

设置属性后,我想开始监视集合的更改,然后对集合附加到的对象执行一些操作。

第一次尝试:

为了将集合附加到处理程序中的对象,我拉d入闭包。很容易,对吧?

好吧,我相信你可以在这里看到这个错误。当集合被删除或替换为新集合时,它无法取消注册事件处理程序,因为 changedFunc 是具有不同闭包的新处理程序。

那么,这样做的正确方法是什么?

0 投票
3 回答
478 浏览

c# - 为什么 INotifyCollectionChanged 使用 IList

读到这里,我不明白为什么不是IList<T>但是为什么是 IList 呢?添加它是没有意义的,所以它应该只是一个 IEnumerable,或者如果你真的想要一个索引器(没有理由),使用 ReadOnlyCollection。

0 投票
1 回答
815 浏览

silverlight - 破解 Silverlight NotifyCollectionChangedEventArgs 以支持多个项目有什么用?

NotifyCollectionChangedEventArgs 的 Silverlight 版本不同于完整的框架版本,因为它不接受多个(添加、更改、删​​除)项目。实际上缺少获取列表的构造函数,因此微软似乎打算阻止这种用法。实际上,如果您传入一个项目集合,它们只是作为内部集合的第一项嵌套。

然而!由于 NewItems 和 OldItems 成员属于 IList 类型,因此它们不是不可变的并且可以增长。我做了以下助手来测试这个想法:

我还没有看到任何问题,但我正在寻找 Silverlight 这个特殊角落的经验和意见。我应该费心像这样批量添加,还是只使用重置?

顺便说一下,这是在 Windows Phone 7.1 (Mango) 上。

编辑:跟进 Erno 的评论。微软在 MSDN 上的此(措辞不佳)Silverlight 文档页面中表示,可以“通常”假设 NewItems 只有一个元素,甚至建议使用 NewItems[0] 访问它的快捷方式。所以他们保留了 IList 签名以获得“兼容性”,但随后继续屠宰该类型的含义。令人失望。

0 投票
1 回答
2417 浏览

c# - ObservableCollection 和 CollectionChanged 事件作为 WCF 数据契约

我将 DataContract 与 ObservableCollection 一起使用:

所以,当我像这样处理我的收藏时。

已添加项目,但未触发 CollectionChanged 事件。

为什么?

0 投票
2 回答
1845 浏览

c# - 如何在 C# 中刷新数据绑定集合?

我正在编写一个简单的 wpf 应用程序,但我卡住了。我想实现,我有一个过滤器类,如果用户输入在过滤器类中更改了 id,则应刷新应用过滤器的列表。所有初始绑定都在工作。该列表与 CompanyId 一起正确显示。

xaml 中的数据绑定:

xaml 的代码隐藏:

(虚拟)工厂类:

产品列表界面:

产品列表类:

公司类(过滤器类):

列表在工厂刷新,但视图没有变化。我可能做错了什么,也许我的整个方法不是最好的。也许我必须使用带有 valueconverter 的 ObservableCollection 类型?任何帮助将不胜感激。干杯!

0 投票
1 回答
1861 浏览

wpf - 当 ItemsControl.ItemsSource 更改时,什么会触发 UI 更新?

在这个问题之后,我只是在研究 BindingList 和 ObservableCollection 之间的区别:Why NOT BindingList in WPF

作为其中的一部分,我测试了将 ItemsControl 的 ItemsSource 绑定到各种类型,包括 List、Collection、ObservableCollection 和 BindingList。

令我惊讶的是,当 ObservableCollection 或 BindingList 被修改时,接口更新了,但在其他人被修改时却没有。那么 WPF 正在侦听导致更新的原因是什么?它不可能是 INotifyCollectionChanged 事件,正如我之前所想的那样,因为 BindingList 没有实现它。困惑。

0 投票
1 回答
2217 浏览

c#-4.0 - 可观察集合 - CollectionChanged 绑定

在编程过程中,我遇到了以下问题:

  1. 可观察集合本身是否实现了 CollectionChanged 事件?(因为不同的书籍提到它确实如此,但谷歌显示不同)

  2. 我有以下代码,我希望我的 UI 通过绑定来更新(代码适用于 windowsPhone 7.1)此外,绑定适用于我的 observable 集合中的单个项目,但是当我尝试向我的集合中添加一个新对象时, CollectionChanged 事件不会触发。

    命名空间 Phone.lib.ViewModel { 公共类 DeviceViewModel : ViewModelBase {

    /li>

注意:该类继承自 viewmodel 基础,其中具有 Inotify 更改接口。

我的 Xaml 中的代码:

我希望有人能够帮助我解决这个问题,因为我已经在这里待了两天了。

另外,我为我的“糟糕”英语道歉,但英语不是我的母语

干杯-巴特

编辑:做了一个小测试

我自己运行了一个小调试测试,看看添加操作是否添加到正确的集合中,因此增加计数值

输出:

新增项目数 1

新增项目数 2

新增项目数 5

编辑 2 (19-03-2012)

上周五我试图让它像你建议的那样工作。但不知何故 XAML 找不到 InfoList,我不知道为什么。也许我在 XAML 本身或背后的代码或 DeviceViewModel 中做错了什么。所以这就是我目前所拥有的:

设备视图模型:

页面背后的代码:

XAML 代码: