Лучший способ управлять ListViewItems в подробном ListView? - PullRequest
1 голос
/ 16 ноября 2009

Я принял следующий шаблон для размещения ListViewItems в ListView с несколькими столбцами (когда я хочу отобразить информацию о списке MyObject типов), и мне просто интересно посмотреть если это лучший способ выполнить эту задачу, или если в коде есть что-то более эффективное и удобочитаемое:

  1. Создайте унаследованный класс ListViewItem, который принимает в конструкторе объект MyObject - я назову это MyObjectListViewItem - и метод Refresh(), который очищает и повторно заполняет подэлементы ListViewItem.
  2. Заполните ListView с моими новыми элементами MyObjectListViewItem.

пример:

public MyObject MyObject { get; set; }
public MyObjectListViewItem(MyObject myObj)
{
    MyObject = myObj;
    this.Refresh();
}

public void Refresh()
{
    this.SubItems.Clear();
    this.Text = myObj.FirstColumnProperty;
    this.SubItems.Add(myObj.SecondColumnProperty); // etc...
}

Предложения? Лучшие способы?

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Рассматривали ли вы использование BindingSource или создание своего собственного, который реализует IBindingListView? Это сохраняет заботу о данных и их состоянии в пределах самих данных, а не о каких-либо элементах управления, которые их используют. Поскольку элементы управления .NET уже созданы для работы с BindingSources, вы можете воспользоваться некоторыми более надежными функциями. Вместо того, чтобы явно вызывать обновление экрана, элемент управления просто отвечает за реагирование на события, вызванные источником привязки, и контроллер, который уведомляет, готов ли элемент управления к обновлению, не форсируя его.

0 голосов
/ 20 ноября 2009

Создание ListViewItems, которые знают, как создать себя, является хорошей идеей.

Если вы немного расширите эту идею, вы дадите столбцам знать, как создать каждый подэлемент, что также позволит им автоматически сортировать ListView, поддерживать группирование и копировать / перетаскивать и отбрасывать строки. Это всего лишь несколько вещей, которые ObjectListView делает для вас.

ObjectListView - это оболочка с открытым исходным кодом для элемента управления .NET WinForms ListView, которая значительно упрощает использование ListView, а также добавляет некоторые очень приятные новые функции и позволяет обойти некоторые досадные ошибки / ограничения.

Simple ObjectListView in action

Если вам понравилась идея @ Rex об использовании BindingSource, проект ObjectListView также предоставляет данные DataListView, которые можно привязать к данным.

...