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 i开发者_开发问答nstead 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?
One of the easiest way, I guess, would be to use a BindingSource
, setting it as the ListBox.DataSource
property to your BindingSource
on design.
- Drop a
BindingSource
on your form; - Set your
ListBox.DataSource
property to yourBindingSource
; - Set your
ValueMember
andDisplayMember
properties just like you're actually doing; - Make your
DataBinding
for yourTextBox
control, and use yourBindingSource
as the source, using yourMyItem.Comment
property; - Assign your
List(Of MyItem)
to yourBinding.DataSource
property; - Your TextBox should follow the
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?
The code below shows how I am doing it. I first set my ListBox DataSource to a class with a collection of BindingList. The class implements IBindingList. I have two TextBoxes I want to bind the SelectedItem to. The code below is how I am doing it:
lbControl.DataSource = SharepointTestBusinessLayer.Control.ListAll();
lbControl.DisplayMember = "ControlName";
lbControl.SelectedIndex = 0;
scTextBoxControlID.DataBindings.Add("Text", this.lbControl.DataSource, "ControlID");
scTextBoxControlName.DataBindings.Add("Text", this.lbControl.DataSource, "ControlName");
精彩评论