C# Winforms、数据绑定、列表框和文本框

C# Winforms、数据绑定、列表框和文本框,c#,vb.net,winforms,data-binding,C#,Vb.net,Winforms,Data Binding,我的屏幕上有一个列表框(MyListBox)和一个文本框(MyTextBox) 列表框中填充了一个列表(共T个),这些列表都是自定义项 现在我尝试这样做: ListBox的数据源是(T的)列表 现在,当项目发生更改时,我希望文本框更新为列表框中所选项目的特定属性 在法典中,这意味着: Me.MyListBox.DisplayMember = "SelectionName" Me.MyListBox.ValueMember = "Id" MyTextbox

我的屏幕上有一个列表框(
MyListBox
)和一个文本框(
MyTextBox

列表框中填充了一个列表(共T个),这些列表都是自定义项

现在我尝试这样做:

ListBox的数据源是(T的)列表

现在,当项目发生更改时,我希望文本框更新为列表框中所选项目的特定属性

在法典中,这意味着:

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时,它工作得非常好

\u列表项
声明如下:

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; }
}
我试图覆盖
MyItem
中的
ToString()
,以便它使用它。但这也不行


有人想试试吗?

我想,最简单的方法之一是使用,将其设置为设计时的
绑定源代码的属性

  • 在表单上放置一个
    BindingSource
  • ListBox.DataSource
    属性设置为
    BindingSource
  • 像实际操作一样设置
    ValueMember
    DisplayMember
    属性
  • 文本框
    控件创建
    数据绑定
    ,并使用
    BindingSource
    作为源,使用
    MyItem.Comment
    属性
  • 将您的
    列表(MyItem)
    分配给您的
    Binding.DataSource
    属性
  • 文本框应位于CurrencyManager.CurrentItem
  • 的注释属性之后,即当前的
    列表框。选择EdItem
    实际上,您可能需要实现该接口以使其正常工作


    但是,如果这一切都与SelectValue完美配合,为什么不直接使用它呢?

    下面的代码显示了我是如何做到这一点的。我首先将ListBox数据源设置为一个包含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");
    

    SelectedValue是Id,我需要注释。我不能用它来调用数据库:)我会试试你的解决方案!我得到了它!您是对的,如果您想为用户提供一个选择,那么我们就不要使用Id.=Poption 5(不需要:),对于选项4:我使用这个绑定:新绑定(“Text”,bindingSource1,“Comment”),因为它已经使用bindingSource的.Current属性了!非常感谢。