c# - 数据绑定(bind)到 List - 查看 ListBox、ComboBox 中数据源的变化

标签 c# winforms list data-binding listbox

我想要 ListBox当我将对象删除或添加到我用作其 DataSource 的列表时自动显示更改.

如何连接 List<T>ListBox并在ListBox中查看基础列表的变化立即?

最佳答案

Windows Forms , 想在绑定(bind)列表控件中查看数据源变化的场景,比如ComboBox , ListBoxDataGridView (复杂的双向数据绑定(bind)),你应该使用一个实现 IBindingList 的类界面为DataSource的数据绑定(bind)。最合适的实现是 BindingList<T> .这样,您控件的基础数据源中的每个添加/删除操作都会立即在控件中可见。

请记住,使用BindingList<T>允许绑定(bind)控件查看添加或删除的项目,但也可以立即查看属性更改,T应该实现 INotifyPropertyChanged .这样,您的控件将收到 PropertyChanged 的通知。并始终显示最新数据。

注1 - ObservableCollection是否解决双向数据绑定(bind)问题?

在 Windows 窗体中,一个常见的错误是使用 ObservableCollection 这不适用于此要求,因为它没有实现 IBindingList .

注2-BindingSource是否解决了双向数据绑定(bind)问题?

如果 BindingSource 的底层数据源没有实现 IBindingList<T>它没有解决双向数据绑定(bind)问题。您需要通知控件从绑定(bind)源重新加载数据,因此您可以调用 ResetBindings BindingSource的方法| .这样,绑定(bind)控件将从数据源重新加载数据并显示最新数据:

this.bindingSource1.ResetBindings(false);

注释 3 - 我应该使用 List<T> .如何使用 List<T> 解决问题?

如果必须使用List<T> , 然后您可以在需要时重置列表框的数据绑定(bind),例如在每次更改后您应该分配其 DataSource为 null 并再次返回数据列表:

this.listBox1.DataSource = null;
this.listBox1.DataSource = list;

关于c# - 数据绑定(bind)到 List - 查看 ListBox、ComboBox 中数据源的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623991/

相关文章:

c# - 如何在 C# 中的项目之间共享公共(public)代码?

c# - 如何在我的 WinForms 应用程序中实现有效的撤消/重做?

css - 溢出切割结果(附图)

list - Prolog 删除所有变量和重复项

c# - 为什么protobuf-net反序列化对象不是 'lean'

c# - 锥线段相交 2D

c# - Windows 窗体组合框控件的奇怪行为

c# - 标记多边形

python - 转换为以行作为列表的普通数据框。将行拆分为列

C# 显示隐藏 Excel 窗口