C# 数据绑定到列表-请参见列表框、组合框中的数据源更改

C# 数据绑定到列表-请参见列表框、组合框中的数据源更改,c#,winforms,list,data-binding,listbox,C#,Winforms,List,Data Binding,Listbox,我希望列表框在删除或向列表中添加用作其数据源的对象时自动显示更改 如何将列表连接到列表框,并立即在列表框中查看基础列表的更改?在Windows窗体中,在您希望在绑定列表控件中查看数据源更改的场景中,如组合框、列表框或DataGridView(复杂的双向数据绑定),您应该使用实现接口的类作为数据绑定的DataSource。最合适的实现是。这样,控件的基础数据源中的每个添加/删除都将立即在控件中可见 请记住,使用BindingList可以让绑定控件看到添加或删除的项,但要立即看到属性更改,T应该实现

我希望
列表框
在删除或向列表中添加用作其
数据源的对象时自动显示更改


如何将
列表
连接到
列表框
,并立即在
列表框
中查看基础列表的更改?

Windows窗体
中,在您希望在绑定列表控件中查看数据源更改的场景中,如
组合框
列表框
DataGridView
(复杂的双向数据绑定),您应该使用实现接口的类作为数据绑定的
DataSource
。最合适的实现是。这样,控件的基础数据源中的每个添加/删除都将立即在控件中可见

请记住,使用
BindingList
可以让绑定控件看到添加或删除的项,但要立即看到属性更改,
T
应该实现。这样,您的控件将收到
PropertyChanged
的通知,并始终显示新数据

注1-ObservableCollection解决了双向数据绑定问题吗?

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

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

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

this.bindingSource1.ResetBindings(false);
注3-我应该使用
列表
。如何使用
列表
解决问题?

如果必须使用
列表
,则可以在需要时重置列表框的数据绑定,例如每次更改后,应将其
数据源
指定为空,然后再次指定给数据列表:

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

在Windows窗体中,在希望在绑定列表控件中查看数据源更改的场景中,如
组合框
列表框
DataGridView
(复杂的双向数据绑定),您应该使用实现接口的类作为数据绑定的
数据源。最合适的实现是。这样,控件的基础数据源中的每个添加/删除都将立即在控件中可见

请记住,使用
BindingList
可以让绑定控件看到添加或删除的项,但要立即看到属性更改,
T
应该实现。这样,您的控件将收到
PropertyChanged
的通知,并始终显示新数据

注1-ObservableCollection解决了双向数据绑定问题吗?

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

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

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

this.bindingSource1.ResetBindings(false);
注3-我应该使用
列表
。如何使用
列表
解决问题?

如果必须使用
列表
,则可以在需要时重置列表框的数据绑定,例如每次更改后,应将其
数据源
指定为空,然后再次指定给数据列表:

this.listBox1.DataSource = null;
this.listBox1.DataSource = 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;
}
}
公共部分类表单1:表单
{

List _items=new 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;
}
}
公共部分类表单1:表单
{

List _items=new List();//可能重复@Sayse,我认为这个问题不是该链接的重复:)该链接的重点是将
列表设置为
数据源
,但OP需要在其
列表框
中查看列表的更改,这意味着他应该使用
IBindingList
BindingList
@RezaAghaei的实现——该问题中公认的答案提到了这一点,但没有解释它。无论哪种方式,op都不会花很长时间找到重复的…“winforms数据绑定列表”把那个复制品作为它的第一个result@Sayse谢谢你的反馈,我认为我的答案对用户来说更简单。希望你也觉得它有用:)@RezaAghaei-和可能重复的@Sayse我认为这个问题不是重复的链接:)该链接的重点是将
列表设置为
数据源de>但OP需要在其
列表框中查看列表的更改,这意味着他应该使用
IBindingList
BindingList
@RezaAghaei的实现-在该问题中,公认的答案提到了这一点,但它没有解释它。无论如何,OP都不会花很长时间找到一个重复的。。。“winforms数据绑定列表“那是它的第一个复制品result@Sayse感谢您的反馈,我认为我的答案对用户来说更为直截了当。希望您也能发现它的用处:)@RezaAghaei-和
List
不适合您查看数据源的更改。
List
不适合您查看数据源的更改。