You'll need to define an event handler for the first listbox (probably `SelectedIndexChanged')
For example:
Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
ListBox2.DataSource = New BindingSource(CType(ListBox1.SelectedItem, KeyValuePair(Of String, myObject())).Value, Nothing)
End Sub
I changed the generic List to an array while I was testing this, here's the code I used to test:
Dim dict As New Dictionary(Of String, Object())
Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
ListBox2.DataSource = New BindingSource(CType(ListBox1.SelectedItem, KeyValuePair(Of String, Object())).Value, Nothing)
End Sub
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
For j As Integer = 1 To 5
Dim MyList As New List(Of Object)
For i As Integer = 1 To 5
MyList.Add(New With {.Index = i, .Pretty = String.Format("Collection {0} DisplayValue {1} ", j, i)})
Next
dict.Add(CStr(j), MyList.ToArray)
Next
Dim bs As BindingSource = New BindingSource(dict, Nothing)
ListBox1.DataSource = bs
ListBox1.DisplayMember = "Key"
End Sub