I have a ListBox (MyListBox
) on my screen, and a Textbox (MyTextBox
).
The ListBox is filled with a List(Of T), which are all custom items.
Now I try to do this:
The ListBox' datasource is the List(Of T).
Now when an Item changes I want the textbox to be updated to a particular property of the selected item in my ListBox.
In code this means:
Me.MyListBox.DisplayMember = "SelectionName"
Me.MyListBox.ValueMember = "Id"
MyTextbox.DataBindings.Add(New Binding("Text", Me._listOfItems, "SelectedItem.Comment", True, DataSourceUpdateMode.OnPropertyChanged))
Me.MyListBox.DataSource = Me._listOfItems
this does not work. But when I bind to SelectedValue instead of SelectedItem it works perfectly.
The _listOfItems
is declared as this:
Dim _listOfItems As List(Of MyItem) = New List(Of MyItem)()
Where MyItem
is this:
public class MyItem
{
public string SelectionName { get; set; }
public int Id { get; set; }
public string Comment { get; set; }
}
I tried overriding the ToString()
in MyItem
so that it would use that. But that doesn't work either.
Anybody care to give it a try?
Thanks!
-Snakiej
One of the easiest way, I guess, would be to use a
BindingSource
, setting it as theListBox.DataSource
property to yourBindingSource
on design.BindingSource
on your form;ListBox.DataSource
property to yourBindingSource
;ValueMember
andDisplayMember
properties just like you're actually doing;DataBinding
for yourTextBox
control, and use yourBindingSource
as the source, using yourMyItem.Comment
property;List(Of MyItem)``to your
Binding.DataSource` property;CurrencyManager.CurrentItem
's Comment property, that is, the currentlyListBox.SelectedItem
.Indeed, you would perhaps need to implement the
INotifyPropertyChanged
interface to make it work properly.But if this all work perfect with the SelectValue, why don't you just use it?