将listBox中选定的项目绑定到文本框

7

我有一个ListBox绑定到用户列表(集合):

    usersListBox.DataSource = null;
    usersListBox.DataSource = _users;
    usersListBox.DisplayMember = "Name";
    usersListBox.ValueMember = "Id";

现在我希望所选项目的属性显示在不同的文本框中,因此我进行绑定:
nameTextBox.DataBindings.Add("Text", usersListBox.SelectedItem, "Name");
loginTextBox.DataBindings.Add("Text", usersListBox.SelectedItem, "Login");

当表单加载时,我可以看到所选项目的值出现在文本框中,但是当更改listBox中的所选项目时,文本框中的值仍然相同。我需要捕获listbox的selectedItemChanged事件并重复绑定文本框吗?或者我漏掉了什么,文本框中的值应随所选项目的更改而更改?

1个回答

15

如果有人需要答案:你需要创建绑定源对象并将其分配给列表框和文本框:

 usersBindingSource = new BindingSource();
 usersBindingSource.DataSource = _presenter.Users;

 usersListBox.DataSource = usersBindingSource;
 usersListBox.DisplayMember = "Name";
 usersListBox.ValueMember = "Id";

 nameTextBox.DataBindings.Add("Text", usersBindingSource, "Name", true, DataSourceUpdateMode.OnPropertyChanged);
 loginTextBox.DataBindings.Add("Text", usersBindingSource, "Login", true, DataSourceUpdateMode.OnPropertyChanged);

1
我只是想让你知道,在新项目中经过数小时的研究后(这是旧项目中的一个问题),这个方法解决了两个问题。非常感谢您发布这个解决方案来帮助其他人,因为这绝对是将文本框数据绑定到SelectedItem的正确方式,但要注意底层数据源(即我们情况下的datacontext表(dlinq))。非常感谢。 - David Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接