为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
智慧大石 2020-02-03 12:53:33
我希望在ListBox将对象删除或添加到列表中时自动显示更改DataSource。如何将a连接List<T>到a ListBox并ListBox立即查看基础列表的更改?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

在Windows Forms,在你想看到在绑定列表控件数据源的变化的情况下,像ComboBox,ListBox或者DataGridView (复杂的双向数据绑定),你应该使用一个类实现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;


查看完整回答
反对 回复 2020-02-03
?
MM们

TA贡献1886条经验 获得超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;

}

}


查看完整回答
反对 回复 2020-02-03
  • 2 回答
  • 0 关注
  • 726 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信