我的屏幕上有一个ListBox(MyListBox
)和一个文本框(MyTextBox
)。
ListBox中填充了List(Of T),这些都是自定义项。
现在我尝试这样做:
ListBox'数据源是List(Of T)。
现在,当项目更改时,我希望文本框更新为ListBox中所选项目的特定属性。
在代码中,这意味着:
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
这不起作用。但是,当我绑定到SelectedValue而不是SelectedItem时,它可以很好地工作。
_listOfItems
声明为:
Dim _listOfItems As List(Of MyItem) = New List(Of MyItem)()
MyItem
是这样的:
public class MyItem
{
public string SelectionName { get; set; }
public int Id { get; set; }
public string Comment { get; set; }
}
我尝试覆盖ToString()
中的MyItem
,以便它可以使用它。但这也不起作用。
有人想试一试吗?
谢谢!
-Snakiej
答案 0 :(得分:9)
我想,最简单的方法之一就是使用BindingSource
,将其设置为BindingSource
设置的BindingSource
属性。
ListBox.DataSource
; BindingSource
媒体资源设为ValueMember
; DisplayMember
和DataBinding
属性,就像您实际做的那样; TextBox
控件制作BindingSource
,并使用MyItem.Comment
属性将List(Of MyItem)``to your
作为来源; CurrencyManager.CurrentItem
Binding.DataSource`属性; ListBox.SelectedItem
的Comment属性,即当前{{1}}。实际上,您可能需要实现ListBox.DataSource
界面才能使其正常工作。
但如果这一切都与SelectValue完美配合,为什么不用它呢?
答案 1 :(得分:0)
以下代码显示了我的操作方式。我首先将ListBox DataSource设置为具有BindingList集合的类。该类实现IBindingList。我有两个要绑定SelectedItem的文本框。下面的代码是我的操作方式:
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");