数据绑定到列表 - 查看ListBox,ComboBox中数据源的更改

时间:2015-11-10 06:12:29

标签: c# winforms list data-binding listbox

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

如何将List<T>ListBox相关联,并立即查看ListBox中基础列表的更改?

2 个答案:

答案 0 :(得分:4)

Windows Forms中,您希望在绑定列表控件中看到数据源更改的方案,例如ComboBoxListBoxDataGridView(复杂的两个 - 方式数据绑定),你应该使用一个实现IBindingList接口的类作为数据绑定的DataSource。最合适的实现是BindingList<T>。这样,控件的基础数据源中的每个添加/删除都将立即在控件中可见。

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

注1 - ObservableCollection是否解决了双向数据绑定Probelm?

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

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

如果BindingSource的基础数据源未实现IBindingList<T>,则无法解决双向数据绑定问题。您需要通知控件从绑定源重新加载数据,因此您可以调用ResetBindings BindingSource方法。这样,绑定控件将从数据源重新加载数据并显示最新数据:

this.bindingSource1.ResetBindings(false);

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

如果必须使用List<T>,则可以在需要时重置列表框的数据绑定,例如,在每次更改后,您应将其DataSource指定为null并再次指向数据列表:

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

答案 1 :(得分:0)

请参阅以下示例,其中将字符串List传递给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;
}
}