Winforms, привязка данных, список и текстовое поле - PullRequest
6 голосов
/ 25 мая 2010

У меня есть ListBox (MyListBox) на моем экране и текстовое поле (MyTextBox).

ListBox заполнен списком (Of T), который представляет собой все пользовательские элементы.

Теперь я пытаюсь сделать это:

Источником данных ListBox является список (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

1 Ответ

10 голосов
/ 25 мая 2010

Один из самых простых способов, я полагаю, будет использовать BindingSource, установив его в качестве свойства ListBox.DataSource для BindingSource на дизайне. 1008 *

  1. Оставьте BindingSource в вашей форме;
  2. Установите свойство ListBox.DataSource на BindingSource;
  3. Установите свойства ValueMember и DisplayMember точно так же, как вы делаете;
  4. Задайте DataBinding для элемента управления TextBox и используйте BindingSource в качестве источника, используя свойство MyItem.Comment;
  5. Назначьте List(Of MyItem)``to your свойство Binding.DataSource`;
  6. Ваш TextBox должен следовать свойству комментария CurrencyManager.CurrentItem, то есть текущему ListBox.SelectedItem.

Действительно, вам, возможно, потребуется реализовать интерфейс INotifyPropertyChanged, чтобы он работал должным образом.

Но если все это отлично работает с SelectValue, почему бы вам просто не использовать его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...