ItemsControl обновляется в два этапа, потому что слишком много элементов? - PullRequest
1 голос
/ 15 марта 2012

У меня есть окно с ItemsControl, которое размещает символы на карте.Символы довольно сложные (каждый состоит из нескольких пользовательских элементов управления).

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

Если пользователь переключается на сценарий A (который имеет 22 символа), вся карта обновляется за один снимок.

Если пользователь переключается на сценарий B (который содержит 39 символов), картапоявляется, чтобы обновить дважды.Некоторые части символов прорисовываются, затем через короткий момент остальные части символов прорисовываются.В конце символы отображаются правильно, но двухэтапное обновление очень неудобно и выглядит непрофессионально.(Это было бы, как если бы вы пытались разместить кучу машин на дорожной карте, и вместо того, чтобы просто появляться автомобили, сначала появлялись кузовы автомобилей, а через мгновение появились колеса и зеркала.)

Пытаясь отладить это, я подумал о том, что отличается между двумя сценариями, и на самом деле единственное, о чем я мог подумать, это то, что количество символов было разным.(Различия в отдельных атрибутах казались довольно случайными.) Итак, я провел тест только с 22 первыми символами Сценария B. Карта обновилась за один раз.Я увеличил количество символов несколько раз, и карта все еще обновлялась за один раз.Когда я набрал 38 символов, карта снова обновилась в два этапа.На всякий случай было что-то странное в последних двух символах, я попытался пропустить первые два, а затем захватить оставшиеся 37, но карта обновилась одним выстрелом снова.Наконец, я попытался пропустить первый символ, а затем захватить оставшиеся 38. Теперь он вернулся к обновлению карты в два этапа.

Итог: если ItemsControl пытается отобразить 38 или более символов одновременно, это происходитв два этапа, иначе это происходит в один.Мне бы хотелось, чтобы карта обновлялась за один этап независимо от количества символов.

Из того, что я читал о виртуализации WPF, я не верю, что это поведение квалифицируется как виртуализация, поскольку после рендерингазавершено, ни один из символов не является скрытым или за кадром.Мой монитор достаточно большой, чтобы не было активных полос прокрутки.

Итак, я полностью озадачен тем, что я испытываю здесь.Любые идеи приветствуются.


Обновление

Я попытался установить Видимость на Скрытый, затем выполнить обновление, затем установить Видимость обратно на Видимый.Не имеет никакого значенияКарта по-прежнему обновляется поэтапно.(Я также попробовал «Свернуть» вместо «Скрытый», но все равно не сработало.)

1 Ответ

0 голосов
/ 15 марта 2012

То, что вы объясняете, кажется мистическим. Возможно, для вас может быть временным вариантом установить непрозрачность всех перерисованных символов на 0, а видимость - свернутую или скрытую.

При выборе сценария видимость всех элементов меняется на «видимая». Когда последний символ вызывает событие IsVisibleChanged, вы устанавливаете непрозрачность всех элементов на 1.

Я знаю, это было бы очень непрофессиональное и рудиментарное решение, но это могло бы быть (если это работает) быстрым решением вашей проблемы, пока не будет найдено действительно (или более) профессиональное решение.

С уважением Shounbourgh

...