Winforms,数据绑定,列表框和文本框

时间:2010-05-25 12:46:59

标签: c# vb.net winforms data-binding

我的屏幕上有一个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

2 个答案:

答案 0 :(得分:9)

我想,最简单的方法之一就是使用BindingSource,将其设置为BindingSource设置的BindingSource属性。

  1. 在表单上删除ListBox.DataSource;
  2. BindingSource媒体资源设为ValueMember;
  3. 设置DisplayMemberDataBinding属性,就像您实际做的那样;
  4. TextBox控件制作BindingSource,并使用MyItem.Comment属性将List(Of MyItem)``to your作为来源;
  5. 分配您的CurrencyManager.CurrentItem Binding.DataSource`属性;
  6. 您的TextBox应该遵循ListBox.SelectedItem的Comment属性,即当前{{1}}。
  7. 实际上,您可能需要实现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");