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

c# - OnCollectionChanged 和后台线程的问题

在我的程序中,我使用后台工作线程打开文件。我的程序的主要结构是数据绑定TreeView。在文件读入过程中,动态TreeView节点在从文件TreeView中读入时被添加到。TreeView我提到的这些节点绑定到称为UICollections(继承自的自定义类ObservableCollection<T>)的容器。我创建了这个UICollection<T>类,以确保CollectionViews这种类型永远不会SourceCollections从后台工作线程中更改。我通过更改UICollection被调用的属性IsNotifying来做到这一点false

我的UICollection<T>班级:

话虽如此,我在UICollection<T>用我的控制结构实现这一点时遇到了问题,这涉及UICollections从后台工作线程添加。

为清楚起见,我的程序移动如下:

  1. Is a file being opened?: YES -> go into Background worker thread

  2. 在后台工作线程中:(Do we need to create new UICollections?: YES -> go to method in UIThread that does so根据需要迭代)

  3. 关闭线程。

需要理解的主要概念是,如果后台工作线程打开,则UICollection.IsNotifying必须设置为。false对于已经知道的集合,我这样做没有问题,但对于我遇到问题的动态集合。

我的后台工作线程所做的示例:

UIThread 中将集合添加到的方法TreeView

有了所有这些,将会发生两件事之一......如果我注释掉该行this.IsNotifying = true;,则会出现异常,OnCollectionChanged因为它在后台线程打开时被引发。如果我保持原样,集合将永远不会反映在视图中,因为OnCollectionChanged永远不会被提升,通知视图。我需要做什么才能允许创建这些集合而不会遇到这些错误?我猜问题出在我的AddCollection()函数或UICollection<T>课堂上。

0 投票
0 回答
160 浏览

c# - 实现 OnCollectionChanged 以便 ListBox 自动更新 WPF

我有这个对象包装器,我用它的实例填充集合:

收藏:

所以,我有一个绑定到集合的 ListBox。当我启动应用程序时,会显示默认值。但是当我向集合中添加一个新条目时 - ListBox 不会使用新项目进行更新。

我想我没有正确实施该OnCollectionChanged方法,但是从我在网上看到的示例中我无法掌握如何做的想法,因为每个案例都如此不同。

编辑: 集合和列表框的代码隐藏绑定:

XAML:

0 投票
0 回答
93 浏览

.net - 设置 DataGrid 样式时不会触发 NotifyCollectionChanged MultiBinding

我正在尝试使用纯粹的风格主义方法来获取我的数据网格标题中的排序索引。这是(剥离的)模板:

SortOrderConverter 基本上是在 SortDescriptionCollection 中查找 SortMemberPath 并返回一个带空格的数字,如果没有找到则返回空字符串。

我的问题是与 SortDescriptions 的绑定似乎不起作用。该转换器在启动时为每个列标题调用一次(如预期的那样),并且对数据网格进行排序没有效果。

当通过排序数据网格触发 NotifyCollectionChanged 时,如何进行多重绑定触发器?

0 投票
2 回答
1269 浏览

wpf - 如何销毁或分离 CollectionView

我观察到 WPF ItemsControls 的一个奇怪行为:如果将 ItemsSource 设置为实现的对象,INotifyCollectionChanged然后将其设置ItemsSource为 null,则为CollectionView向 ItemsControl 提供数据而创建的对象仍然侦听CollectionChanged源对象的事件。
如果现在通过不同的线程更改源集合,则会CollectionView引发异常(不附加到任何控件)。虽然我理解为什么会发生这种情况,但我真的很难解决这种情况。

因此主要问题是,我怎样才能销毁 aCollectionView使其不再监听CollectionChanged-event。或者我该如何禁用它/分离底层集合。

请注意:所描述的行为不适用于ObservableCollection. 源对象是IEnumerableT 并实现INotifyCollectionChanged

0 投票
1 回答
320 浏览

c# - INotifycollection 在 ICollection 上更改目的

鉴于我无法将对象的类型更改为 observablecollection,我想观察 Icollection 对象的变化。如何实现?

0 投票
1 回答
839 浏览

c# - c# mvvm 嵌套 ObservableCollection CollectionChanged NewStartingIndex >0

我是stackoverflow的新手。我整天都在寻找解决方案,所以我决定在这里问。

我正在开发一个使用 WPF 和数据绑定/MVVM 的应用程序。我有一个嵌套的 ObservableCollection,它是类程序的一部分。两者都正确实现了 INotifyPropertyChange。

在我的构造函数中,我创建了一个名为 ListPrograms 的 Program 类型的 ObservableColletion,并从我的数据服务中用程序列表填充它。这一切都很好。绑定也正常工作,在我的主视图中,我选择了一个程序,嵌套的价格列表显示在详细视图中。OnPropertyChange 为 SalesPrice 的每个属性正确触发。

我的要求是,在用户输入时,程序需要重新计算嵌套列表的每个行项目中的累积价格。我有一个方法可以正确地做到这一点。

我为了运行该方法,我尝试附加一个 collectionchanged 事件。

///

我遇到的问题是集合更改事件仅为我在运行时添加到集合中的新 SalesPrices 注册。我检查了 e.NewStartingIndex,它以初始 SalesPrice 记录的数量开始。(例如,第一个程序和 9 个销售为其 ObservableColletion 定价,而 e.NewStartingIndex 的值为 8)。当我在运行时将新记录添加到列表中时,甚至正在注册并通知更改。

我认为这种情况正在发生,因为我从数据服务中传递了带有已填充的 SalesPrices 列表的 Program 对象,并且该事件仅注册新项目。

任何想法?

坦率

0 投票
1 回答
102 浏览

c# - 哪个类触发了 CollectionChanged 事件?

我有一个由几个类操作的 ObservableCollection。我想找出哪个类触发了该事件。我已经查看了 sender 对象并查看了 NotifyCollectionChangedEventArgs 的属性,但没有找到任何东西。我只得到事件的原因,例如:重置、添加或删除。我要找的是始作俑者。

这样做的目的是我需要我的集合以不同的方式运行,具体取决于修改它的类。

0 投票
1 回答
668 浏览

c# - CollectionChanged 事件未在静态 ObservableCollection 上触发

在一类中,我将对象添加到我的 ObservableCollection。在另一堂课中,我正在处理我添加的对象,然后将其从集合中删除。

这两个类无法相互通信,所以我决定去static收集(由于某种原因我只能访问类定义)

在我的第一堂课中,所有元素都已正确添加(我检查了Count属性),在第二堂课中我订阅了该CollectionChanged事件。但是,该事件并未引发。我认为这是因为static关键字,但我不确定。

这是一个代码示例:

0 投票
1 回答
90 浏览

c# - C#:订阅从另一个事件触发的事件

我正在尝试从 CollectionChanged 回调中引发 PropertyChangedEventHandler。它被提升了,但它没有到达订阅者。

也许我不能把 EventHandler 当作一个变量来对待?尽管我过去这样做没有问题,但它只是从另一个我遇到问题的事件中提出来的。

任何帮助表示赞赏,谢谢。

0 投票
2 回答
330 浏览

c# - 将项目添加到对象列表后列表框 UI 更新

我得到了这个清单:

它绑定到我的列表框“boardlist”。现在我希望每次添加新的 Boardnote 后 Listbox 的 UI 都会更新。我已经知道我应该使用“INotifyCollectionChanged”,但我已经过度紧张了。这是“boardlist”的代码: