2014-04-07 102 views
0

我有一个填充组合框,我想绑定到Integer。
想要的行为是当数据源更改为新对象时,组合框选定值将相应地更改为绑定到它的整数。VB.net DataBindingSource:将Integer绑定到Combobox中

问题是,默认绑定(我简单地拖动和从数据源pannel拖放整个组合框)将绑定组合框的文本属性,而不是SelectedIndex。

现在我还挺使它以这种方式工作:

BindingSourceName.DataSource = Object 
cmbType.SelectedIndex = Object.Type 

但我必须手动管理它也同时节省了在用户修改绑定的对象。
有没有适当的方法来改变默认的bindig bahaviour,使其自动绑定Integer到我的ComboBox的SelectedIndex?

回答

1

最接近我能达到你想要的是如果我使用ValueMember索引。例如:

我填补我的组合框,像这样一对夫妇项目:

Public Class NameValue 
Property Name as String 
Property Type as Integer 
Public Sub New(ByVal pName as String, ByVal pVal as Integer) 
Name = pName 
Type = pValue 
End Sub 
End Class 

Dim cmbList As New List(Of NameValue) 
cmbList.Add(New NameValue("Name",1) 
cmbList.Add(New NameValue("Name2",2) 
cmbList.Add(New NameValue("Name3",3) 

cmbType.Items = cmbList 
cmbType.ValueMember = "Value" 
cmbType.DisplayMember = "Type" 

现在第一阶段已经完成。 Combobox包含三个名称和值绑定在一起的项目。下一步是设置你所要求的:将ComboboxValue绑定到Object类。

cmbType.DataBindings.Add(New Binding("SelectedValue", BindingSourceName, "Type", False, DataSourceUpdateMode.OnPropertyChanged)) 

只要BindingSource“BindingSourceName.DataSource”发生更改,应更新组合框。如果您更改组合框,Object.Type将更改为选定的值。

+0

那么,obv这不能编译(cmb.Items是只读等),但该方法似乎工作。我用一个字典(这是一个vb.net标准)替换了自定义类,并使用SelectedIndex更改了绑定中指定的属性。而不是项目= ...这是不可行的我用cmbType.DataSource =新的BindingSource(cmbTypeItems,无),从cmbTypeItems,这是我的字典中的键值。最后一个问题是:它似乎工作,是否有两个绑定在同一控件上处于活动状态是正确的? – DkSw

+0

对不起,项目是数据源。 – WozzeC

+1

我不能看到有两个绑定的任何问题,因为他们是两个不同的东西。一个绑定用于内容,一个绑定用于值(在这种情况下为索引)。 – WozzeC