четверг, мая 06, 2010

Биндим IEnumerable к ListBox

Недавно возникла потребность забиндить IEnumerable<XElement> источниклм данных к обчному ListBox. Казалось бы, чтого проще? Но забиндить нужно так, чтобы выглядело user friendly. Собственно, если просто присвоить свойству DataSource значение, то для каждого XElement будет вызван ToString(), который вернёт строковое представление XML элемента. Это, конечно, не плохо, и, навреное, даже удобно для разраотчика - сразу видно что выбрал, но для конечного пользователя программного продукта выглядит это ужасно.
Спустя недолгое время мук творчества на свет был рождён вот такой компактный и удобный код:

void fillListBox(ListBox listBox, IEnumerable<XElement> elements)
{
  if (listBox == null || elements == null)
    return;

  listBox.Items.Clear();

  listBox.DisplayMember = "Value";
  listBox.ValueMember = "Key";

  foreach (var element in elements)
  {
    listBox.Items.Add(
      new KeyValuePair(element, element.Attribute("name"))
      );
  }
}


* This source code was highlighted with Source Code Highlighter.

В результате пользователь имеет удобный и красивый список, а программист имеет лёгкую возможность взять SelectedValue и получить выбранный XElement.

Комментариев нет:

Отправить комментарий