Проблема с перерисовкой Silverlight DataGrid

У меня есть Silverlight DataGrid, содержащий один столбец шаблона, в котором отображается пользовательский элемент управления. В пользовательском элементе управления есть индикатор выполнения, представляющий обработку, а когда обработка завершена, анимация скрывает индикатор выполнения и показывает законченную метку.

Есть два случая, когда кажется, что сетка данных не перерисовывается:

Во-первых, когда пользователь выполняет много прокрутки, сетка данных начинает с перерисовки анимации, когда элемент управления пользователя появляется в поле зрения, и, наконец, достигает точки, в которой ничего не перерисовывает.

Во-вторых, в пользовательском элементе управления есть событие щелчка, которое отображает всплывающее окно. Когда всплывающее окно закрывается, пользовательский элемент управления снова не может правильно перерисовать себя.

Есть идеи относительно того, почему возникает такое поведение, и способы его решения?


person t3rse    schedule 30.07.2009    source источник


Ответы (2)


Предыдущий ответ правильный. Я обнаружил, что иногда вам нужно правильно обрабатывать события Loading_Row и Unloading_Row, если вы хотите, чтобы какой-либо из ваших элементов управления работал должным образом. В моих случаях, когда свойства элементов управления фактически привязаны к объекту, чтобы работать лучше всего. Если вы попытаетесь полагаться на анимацию, видимость и тому подобное, вы увидите странное поведение, но если вы привяжете полосу выполнения к объекту, который поддерживает прогресс для каждого элемента за кулисами, тогда каждый раз, когда эта строка отображается, она будет повторно связываться и перерисовываться.

person Midnit    schedule 31.08.2009
comment
Было ли у вас странное поведение, когда пользователи также щелкали внутри сетки? Кажется, что щелчок также вызывает перерисовку, которая также может вызвать перерисовку анимации. - person t3rse; 01.09.2009

Вы должны понимать, что DataGrid не имеет одного экземпляра вашего элемента управления для каждой строки в сетке. Источник данных может иметь миллионы строк, в то время как сетке не требуется больше экземпляров вашего элемента управления, чем поместится на экране. Это означает, что при прокрутке, например, не отображаются экземпляры вашего элемента управления, ранее невидимые; он просто назначает видимым в данный момент элементам управления любые значения, необходимые для правильного отображения текущей позиции прокрутки.

Я не знаю, есть ли обходной путь.

person Gabe    schedule 09.08.2009