2016-01-14 4 views
1

Я использую контроль RadListView из Telerik UI for WindowsForms.Telerik является не чертеж детали после обновления источника данных

Что я шаг за шагом делать это:

  1. Установите DataSource для элемента управления.

  2. вручную прокручивать вертикальную полосу прокрутки вниз

  3. После таймер тикает, источник данных renewd во время выполнения.

На данный момент, после того, как прокручивать и источник данных изменилась, полоса прокрутки остается в том же положении (как я ожидал), но ListView не правильно обновить макет, любой элемент рисуется в элементе управления.

Единственный способ, который я нашел для решения этой проблемы, - это ручная прокрутка вверх (только вверх).

Я пытался использовать методы EnsureItemVisible, PerformLayout, Invalidate и ScrollTo, я также переключены состояние Visible собственности, но все исправили проблему компоновки.

Как я могу это исправить ?.

+0

Что такое DataSource - какой тип объекта? Большинство элементов управления не «видят» изменения в простом «List (of T)» или в элементах в нем. – Plutonix

+0

@Plutonix это IEnumerable пользовательского типа, который просто предоставляет некоторые свойства строки – ElektroStudios

ответ

2

ListView не обновлялся, потому что ваш источник данных не поддерживает уведомления. Чтобы добиться этого, ваш источник данных должен реализовать IBIndingList, и ваши объекты должны реализовать INotifyPropertyChanged. Например, вместо IEnumerable вы можете использовать BindingList. Пример этого доступен в this article - хотя в статье используется RadGridView, со стороны источника данных подход одинаковый.

Тогда вы могли бы взглянуть на DataBinding article для самого RadListView.

1

Вы пытались вызвать Application.DoEvents()?

+0

Это не ответ, и это не очень хороший совет. Смотрите: [Is DoEvents evil] (http://blog.codinghorror.com/is-doevents-evil/) – Plutonix

+0

Пробовал теперь, но не работал. спасибо anyways – ElektroStudios

+0

@Plutonix: Я просто попытался помочь ... У меня были некоторые проблемы с компонентами telerik когда-то, и Application.DoEvents() действительно сработало для меня .... – Abner