问题标签 [bindinglist]

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 回答
1611 浏览

c# - 将绑定列表复制到另一个

//for(int i=0;i<temp.Count;i++) this.Add(temp[i]);

是一种如此缓慢的恢复方式,那么我可以使用什么来更有效地恢复()?

0 投票
1 回答
2861 浏览

c# - C# DataGridView 绑定到 SortedBindingList 不显示排序

我已经实现了http://www.martinwilley.com/net/code/forms/sortablebindinglist.html中显示的 SortedBindingList 类

然后我成功地向它添加了相同类型的对象。

我在表单上有一个 DataGridView,其 BindingSource 设置为列表。当我单击列标题时,列表会在 SortedBindingList 对象中排序,但是该更改不会反映在 DataGridView 中。DataGridView 上是否有我需要设置的属性或我需要订阅的事件?

如果我在返回结果的 Compare 方法中的 SortedBindingList 代码中放置一个断点,我可以看到列表已正确排序,只是 DataGridview 没有将列表显示为已排序。我错过了什么?

谢谢

0 投票
1 回答
3629 浏览

c# - 自定义 ObservableCollection或绑定列表支持定期通知

概括

我有一个快速变化的大型数据集,我希望将其绑定到 UI(带分组的数据网格)。变化分为两个层面;

  • 经常从集合中添加或删除项目(单程每秒 500 个)
  • 每个项目都有 4 个属性,在其生命周期中最多会更改 5 次

数据的特点如下;

  • 收藏品中有约 5000 件商品
  • 可以在一秒钟内添加一个项目,然后进行 5 次属性更改,然后将其删除。
  • 一个项目也可能会在一段时间内保持某种临时状态,并且应该向用户显示。

我遇到问题的关键要求;

  • 用户应该能够按对象上的任何属性对数据集进行排序

我想做什么;

  • 仅每N秒更新一次 UI
  • 仅引发相关的 NotifyPropertyChangedEvents

如果项目 1 有一个属性状态,它在间隔内从 A -> B -> C -> D 移动,我需要/希望只引发一个“状态”更改事件,A->D。

我很欣赏用户不需要每秒更新数千次 UI。如果添加了一个项目,它的状态发生了变化,并且在 UI 更新之间 N 秒的窗口内全部删除,它不应该命中 DataGrid。

数据网格

DataGrid 是我用来显示数据的组件。我目前正在使用 XCeed DataGrid,因为它可以轻松地提供动态分组。我对它没有感情投入,如果我可以提供一些动态分组选项(其中包括经常更改的属性),股票 DataGrid 会很好。

我系统中的瓶颈目前是当一个项目的属性发生变化时重新排序所花费的时间

这会占用 YourKit Profiler 中 98% 的 CPU。

表达问题的另一种方式

给定两个最初相同的 BindingList / ObservableCollection 实例,但第一个列表此后有一系列附加更新(您可以收听),生成最小的更改集以将一个列表转换为另一个列表。

外部阅读

我需要的是 George Tryfonas 的这个ArrayMonitor的等价物,但被概括为支持添加和删除项目(它们永远不会被移动)。

注意,如果有人能想到更好的摘要,我将非常感谢他们编辑问题的标题。

编辑 - 我的解决方案

XCeed 网格将单元格直接绑定到网格中的项目,而排序和分组功能由 BindingList 上引发的 ListChangedEvents 驱动。这有点违反直觉,并排除了下面的 MontioredBindingList,因为行将在组之前更新。

相反,我自己包装项目,捕获属性更改事件并将它们存储在 HashSet 中,如 Daniel 建议的那样。这对我来说效果很好,我会定期迭代这些项目并要求他们通知任何更改。

MonitoredBindingList.cs

这是我对可以轮询更新通知的绑定列表的尝试。它可能存在一些错误,因为它最终对我没有用。

它创建一个添加/删除事件队列,并通过列表跟踪更改。ChangeList 与基础列表具有相同的顺序,因此在我们通知添加/删除操作后,您可以针对正确的索引提出更改。

0 投票
1 回答
1167 浏览

c# - 带有 IList 的 BindingList数据源、元素顺序

当我将它用作 a的 a (Windows 窗体)时,我可以假设元素的顺序IList<T>保持不变,以便和在同一个对象上是等价的吗?DataSourceBindingSourceBindingSource.PositionList.IndexOf()

这对我很重要,因为Findno 列表不支持BindingList,所以我使用普通的旧IList.IndexOf方法来确定元素的位置:

显然这工作正常。但我不知道我是否还不能弄清楚我是否真的可以依靠它来工作。我有点担心,因为BindingList'List属性将数据复制到新的列表结构中(见DataSource备注)...

干杯,马蒂亚斯

0 投票
2 回答
9148 浏览

c# - 如何从与 gridview 绑定的 BindingList 中删除项目?

我有一个gridview,我在其中使用绑定列表进行绑定。在这个网格中,我可以添加/删除项目 n 次。所以我想要表达如果我从网格中删除一行,它将从列表中删除相同的项目。我的列表是 BindingList。

0 投票
1 回答
109 浏览

.net - 为什么 myList(i) 不通过 BindingList(of T) 继承类中的 througp 属性 Item

我创建了一个继承自的类,BindingList(of T)并添加了一个 Item(indx as Integer)隐藏基本属性项的属性,如下所示

现在,当我尝试访问一个项目时,myUnity.Item(1)一切都可以正常工作。代码转到属性 Item 执行它必须执行的操作并返回 myEntity。但是如果我写myUnity(1)我得到 myEntity 而不通过属性 item 有人知道为什么吗?

0 投票
1 回答
3853 浏览

c# - 当 BindingList 中的现有项目发生更改时,Listbox 拒绝更新

在一天中的大部分时间里,我一直在疯狂地试图让它发挥作用。

我的代码中有几个类。我将尝试在下面发布相关代码并使其尽可能简短

在另一个表单类中,我有以下函数,在程序启动时调用一次

最后

我正在尝试为不同的服务器构建一个简单的用户设置菜单,用户可以在其中添加、删除或更改现有的服务器设置。在带有列表框的表单中,用户单击一个按钮,该按钮将显示另一个带有一些文本框的表单供用户填写,然后单击“确定”以执行更改。

这些更改反映在 bindingList 中的 Items 中(新项目或对现有项目的更新)。添加新的服务器项或从 bindingList 中删除一项会立即反映在列表框中,但是对现有项进行更改会拒绝更新列表框。关闭包含列表框的表单并再次打开它将显示更改,但在列表框中完成更改后,我无法立即使其工作。

我尝试在列表框上调用 refresh(),在 BindingList 上调用 resetBindings() 和其他一些。

我在这里错过了什么吗?

0 投票
1 回答
948 浏览

c# - 可排序的绑定列表: 关于 RemoveSortCore 的困惑

我正在实现我自己BindingList<T>的支持排序的。到目前为止一切都运行良好,但我对如何实施RemoveSortCore. 文档不是很明确,它只说:

如果在派生类中实现排序,则删除使用 ApplySortCore 应用的任何排序

这是否意味着我应该恢复项目的原始顺序?这篇 MSDN 文章中显示的实现只设置_isSorted为 false,并没有真正恢复原始顺序,这使得它非常没用恕我直言......

如果我希望能够恢复原始顺序,我想我需要维护原始集合的副本(或者有更好的方法吗?)。但是如果我这样做了,我该如何处理对集合进行排序时的修改?

  • 覆盖时InsertItem,我应该在未排序副本的末尾添加新项目吗?
  • 覆盖时RemoveItem,我得到了排序集合中的索引。但这意味着如果我还想从未排序的集合中删除该项目,我需要找到它的原始位置,这是一个 O(n) 操作,而RemoveItem通常预计是一个 O(1) 操作。同样的问题也适用于SetItem

你会怎么处理?欢迎任何建议

0 投票
2 回答
565 浏览

c# - 带有 int 数组的 BindingList 更新列表框?

我有一个如下所示的 BindingList:

每个条目都是一个 int[6],现在我想将它绑定到一个列表框,以便每次添加一组数字时它都会更新它。

结果是每个条目的以下文本:

如何格式化输出或更改它,以便在生成时打印每个条目集的数字?

0 投票
1 回答
840 浏览

c# - 铸造 BindList到绑定列表

我有一个实现接口 I 的对象(A 类)。

我的对象 C 有一个 BindingList listA

在某一时刻,我需要执行以下演员:

但这由于转换错误而无法编译。

我应该怎么去做?