数据绑定到 List - 查看 ListBox、ComboBox 中数据源的变化

Posted

技术标签:

【中文标题】数据绑定到 List - 查看 ListBox、ComboBox 中数据源的变化【英文标题】:Databinding to List - See changes of data source in ListBox, ComboBox 【发布时间】:2016-02-10 23:26:02 【问题描述】:

我希望ListBox 在我将对象删除或添加到我用作其DataSource 的列表中时自动显示更改。

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

【问题讨论】:

how to bind a list to a combobox? (Winforms)的可能重复 @Sayse 我认为问题不是该链接的重复 :) 该链接的重点是将 List<T> 设置为 DataSource 但 OP 需要查看其列表中的更改ListBox 这意味着他应该使用IBindingListBindingList 的实现。 @RezaAghaei - 该问题中接受的答案提到了这一点,但是是的,它没有解释它。无论哪种方式,操作都不需要很长时间才能找到重复项...“winforms 数据绑定列表”将该重复项作为其第一个结果 @Sayse 感谢您的反馈,我认为我的回答对用户来说更直接。希望你也觉得它有用:) @RezaAghaei - MSDN: Winforms Databinding 和 a second duplicate 【参考方案1】:

Windows Forms中,如果你想在绑定列表控件中看到数据源的变化,比如ComboBoxListBoxDataGridView(复杂的双向数据绑定),你应该使用一个实现IBindingList接口作为数据绑定的DataSource的类。最合适的实现是BindingList<T>。这样,您的控件底层数据源中的每个添加/删除操作都将立即在控件中可见。

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

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

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

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

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

this.bindingSource1.ResetBindings(false);

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

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

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

【讨论】:

【参考方案2】:

请参阅以下示例,其中将字符串列表传递到 listBox 实例。

public partial class Form1 : Form

List<string> _items = new List<string>(); // <-- Add this

public Form1()

    InitializeComponent();

    _items.Add("One"); // <-- Add these
    _items.Add("Two");
    _items.Add("Three");

    listBox1.DataSource = _items;


【讨论】:

List&lt;T&gt;不适用于需要查看数据源变化的情况。

以上是关于数据绑定到 List - 查看 ListBox、ComboBox 中数据源的变化的主要内容,如果未能解决你的问题,请参考以下文章

绑定到 List<string> 时如何使 ListBox 可编辑?

在 WinForms 中将 Listbox 绑定到 List<object>

使用 SelectionMode = Multiple 对 ListBox 进行数据绑定

winform datagridview 绑定 list .c#

winform中的ListBox和ComboBox绑定数据用法实例

wpf ListBox或ListView等数据控件 绑定数据,最简单的方式