Я использую класс, который выглядит примерно так:
Public Class ComboboxBinder(Of TKey, TValue)
Inherits List(Of KeyValuePair(Of TKey, TValue))
Public Sub New()
End Sub
Public Overloads Sub Add(ByVal key As TKey, ByVal value As TValue)
MyBase.Add(New KeyValuePair(Of TKey, TValue)(key, value))
End Sub
Public Sub Bind(ByVal control As ComboBox)
control.DisplayMember = "Value"
control.ValueMember = "Key"
control.DataSource = Me
End Sub
End Class
тогда, чтобы использовать его, вы должны поставить что-то вроде этого:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim binder As New ComboboxBinder(Of Guid, String)
binder.Add(Guid.NewGuid, "Item 1")
binder.Add(Guid.NewGuid, "Item 2")
binder.Add(Guid.NewGuid, "Item 3")
binder.Add(Guid.NewGuid, "Item 4")
binder.Bind(ComboBox1)
End Sub
Winforms это такая боль с привязкой, но это решение работает достаточно хорошо для нашей компании.
Также стоит отметить, что вы не можете связать с Dictionary
, это должно быть IList
или IListSource
, следовательно, связыватель Combobox
является List<KeyValuePair<TKey,TValue>>