将组合框和列表框绑定到List(VB.NET)时出现问题

时间:2014-08-25 14:40:12

标签: vb.net combobox listbox datasource

我正在尝试将ComboBox和ListBox绑定到Vb.Net(VS2013)中的List(Of String),这是针对WinForms应用程序的,就是在ComboBox上设置DataSource属性之后ListBox,在其中任何一个上选择一个项目会影响另一个控件,例如,如果我从ListBox中选择了一个项目,那么在使用该信息填充控件之后,则会在ComboBox中选择相同的项目,这样就可以了对于ComboBox,同样的方式,如果我从中选择一个项目,那么该项目也会在ListBox中被选中,所以我的问题是......如何将组合框和列表框绑定到同一个List(Of String)而不影响控件上的行为,目的是保持该表单中的所有控件基于List的内容同步,我在这样的模块中声明了List:

Public listaAreas As New List(Of String)

然后在表单加载时填充控件:

    cmbArea.DataSource = listaAreas
    lstAreas.DataSource = listaAreas

每当我需要更新信息时,我都会运行此方法:

Private Sub RefreshLists()
    lstAreas.DataSource = Nothing
    lstAreas.DataSource = listaAreas

    cmbArea.DataSource = Nothing
    cmbArea.DataSource = listaAreas
End Sub

如果我错过了一些信息,请告诉我,这是我的第一篇文章,但我认为这很清楚,所以你可以了解我在这里想要完成的事情...... =)

提前致谢!

1 个答案:

答案 0 :(得分:0)

尝试设置单独的BindingSources并尝试使用BindingList(Of String)而不仅仅是List,它不会报告项目更改:

Private listaAreas As New BindingList(Of String)
Private cbSource As New BindingSource(listaAreas, String.Empty)
Private lbSource As New BindingSource(listaAreas, String.Empty)

Public Sub New()
  InitializeComponent()
  cmbArea.DataSource = cbSource
  lstAreas.DataSource = lbSource
End Sub

您的代码中使用了相同的货币位置,但通过定义两个单独的绑定源,每个绑定源都有自己的位置属性。