WPF - нужно событие для при виртуализацииStackPanel создает элементы для ListView
-
09-10-2019 - |
Вопрос
Есть ли способ сказать, когда контейнеры будут завершены для просмотра для ListView?
Подробное объяснение того, что я сделал до сих пор
У меня есть элемент управления ListView, который имеет DataTemplate в одном из его столбцов, которые содержат элемент управления флажок .. Я выяснил, как динамически получить доступ к флажок, используя объект, к которому связан список.
ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox");
Проблема в том, что флажки «сброс» (сброшены »(записаться) всякий раз, когда я прокручиваю слишком далеко или всякий раз, когда я сортирую столбцы. Я выяснил, что это потому, что виртуализацияStackPanel выпил только контейнеры для этих листов, которые были видимыми (или почти видимыми) .. и потому, что флажок находится внутри таблицы данных, определенного в XAML, он выброшен каждый раз, когда он выброшен или когда список отсортирован.
Создав об этом, создав отдельный список флажков и используя событие фактических флажков «Нажмите», чтобы изменить состояние соответствующего флажка в моем списке .. Затем сделал небольшой метод, чтобы перейти изменить состояние всех видимых флажков, когда Пользовательские прокрутки ... в результате, похоже, он должен иметь в первую очередь.
За исключением случаев, когда я сортирую столбцы. Я попытался сделать это повторно сделать флажки (как и раньше) сразу после того, как он отсортировал столбец, но он не сработал. Мое лучшее предполагает, что он не сразу же делает контейнеры после того, как я сортирую ..
Есть ли способ сказать, когда контейнеры будут завершены для просмотра для ListView?
Решение
Если вы связываете свои флажки ischecked свойство для логического свойства в контексте вашего данных, то у вас не будет этой проблемы.
Вся целью виртуализацииStackPanel снижает использование памяти, не создавая listiTem, если не требуется.
По сути, вам нужно переместить сторону данных флажков от контроля.