2009-12-01 5 views
6

у меня есть ListBox привязки данных к списку пользователей (сборник):DataBind 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 из списка и повторить привязку текстовых полей? Или мне что-то не хватает, а значения в текстовых окнах должны меняться с изменением выбранного элемента?

ответ

12

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

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); 
+0

Я просто хотел, чтобы вы знали, что после нескольких часов исследований в новом проекте (это было проблема в старом проекте), это и то и другое. Большое спасибо за публикацию решения, чтобы помочь другим, так как это определенно правильный способ привязки текстового поля к SelectedItem, но базовый источник данных (т. Е. Таблица datacontext (dlinq) в нашем случае). Огромное спасибо. –

Смежные вопросы