Вы можете привязать к List(Of Item)
вот так:
Dim ItemList = New List(Of Item)
' Fill the list with appropiate values.'
listbox1.DataSource = ItemList
listbox1.DisplayMember = "Name"
listbox1.ValueMember = "ID"
Затем listbox1.SelectedValue
содержит ID
, и вы можете получить доступ к имени следующим образом:
DirectCast(listbox1.SelectedItem, Item).Name
Если вы хотите показать и ID
, и Name
, то я предлагаю вам добавить свойство, которое будет отображаться в классе Item
:
Public ReadOnly Property DisplayedValue() as String
Get
Return Me.Name & " (" & Me.ID.ToString & ")"
End Get
End Property
Тогда при связывании списка сделайте
listbox1.DisplayMember = "DisplayedValue"
Обновление:
На основании ваших комментариев ниже я бы сказал, что мое решение все еще работает. Однако с помощью этой методологии элементы должны быть добавлены в список, а затем список, связанный с объектом. Элементы не могут быть добавлены по отдельности и непосредственно в список (так как вы отделяете данные от представления, я не вижу в этом проблемы).
Чтобы показать окно сообщения с выбранным элементом, вам просто нужно сделать:
MessageBox.Show(DirectCast(listbox1.SelectedItem, Item).ID.ToString))