c# - 这是 BindingList 应该工作的方式吗?

标签 c# winforms devexpress gridcontrol

我有一个绑定(bind)到 BindingList 的 DevExpress GridControl。我使用了 BindingList,以便更改自动应用到绑定(bind)控件。

当我从列表中添加或删除项目时,它工作得很好,但当我更改项目时,它不会按照我想要的方式退出工作。

我创建了一个在另一个线程中运行的 foreach 循环(以保持 UI 线程可以自由更新),该循环遍历 BindingList 中的所有对象并更改它们的一些属性。

我希望它的工作方式是每个属性都实时更新 GridControl 上的更新。然而,更新非常“笨拙”。有时它一次更新 2 行,有时我必须单击 GridControl 才能获取新值。

为什么会这样?

在每个项目之后调用 DataControl.RefreshDataSource() 是一个好的解决方案吗?

最佳答案

but when I change an item, it doesn't quit work the way I want it.

因为项目内的更改不是 BindingList 关心的东西 - 这就是项目应该实现 INotifyPropertyChanged 的​​原因。

基本上绑定(bind)列表会说明 LIST 何时发生更改,但是如果您更新属性 - 列表应该如何知道 ;) 以及它为什么要关心 - 每个项目都单独负责使用所述接口(interface)发布对其属性的更新。

Is it a good solution to call DataControl.RefreshDataSource() after each item?

最糟糕的方式。确保项目实现 INotifyPropertyChange 并相应地引发 PropertyChanged 事件。

关于c# - 这是 BindingList 应该工作的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153554/

相关文章:

c# - 如果在 C# 中不存在,则自动创建文件夹

c# - 如何更改 winform DataGridview 标题的颜色?

c# - 作为 MDI 子窗口的程序

delphi - 使用 Devexpress VCL 13.1.2 时出现 Stackoverflow 错误(无限循环)

devexpress - 是否可以在 DevExpress XtraReport 中向上移动空标签?

c# - PopupContainerEdit with XtraTreeList 作为下拉演示

c# - 在不打开图形的情况下使用数据库获取图形的范围

c# - 如何在调用 SQL Server 数据库调用的 Web 服务器上运行 AngularJS

c# - 将事件作为参数传递给方法

c# - 以编程方式运行项目