DataBind listBox выбранный элемент в текстовые поля - PullRequest
6 голосов
/ 01 декабря 2009

У меня привязка данных 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 значения в текстовых полях остаются прежними Нужно ли ловить selectedItemChanged из списка и повторять привязку текстовых полей? Или я что-то упускаю и значения в текстовых полях должны меняться при изменении выбранного элемента?

1 Ответ

13 голосов
/ 01 декабря 2009

Если кому-то нужен ответ: вы должны создать исходный объект привязки и назначить ему список и текстовые поля:

 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);
...