WPF - необходимо событие, когда VirtualizingStackPanel создает элементы для ListView.
Есть ли способ сказать, когда контейнеры заканчиваются для ListView?
Подробное объяснение того, что я сделал до сих пор
У меня есть элемент управления ListView, который имеет DataTemplate в одном из своих столбцов, который содержит элемент управления CheckBox. Я выяснил, как получить динамический доступ к CheckBox с помощью объекта, с которым связан ListView.
ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox");
Проблема в том, что CheckBoxes "сбрасываются" (становятся непроверенными) всякий раз, когда я прокручиваю слишком далеко или когда сортирую столбцы. Я понял, что это потому, что VirtualizingStackPanel выплевывал контейнеры только для тех объектов ListViewItems, которые были видимы (или почти видимы). А поскольку CheckBox находится внутри DataTemplate, определенного в XAML, он выбрасывается каждый раз, когда выходит из поля зрения. или когда список отсортирован.
Я обошел это путем создания отдельного списка CheckBoxes и использования фактического события "click" CheckBoxes, чтобы изменить состояние соответствующего CheckBox в моем списке... затем сделал небольшой метод, чтобы изменить состояние всех видимых CheckBox всякий раз, когда пользователь прокручивает... в результате он выглядит так, как и должно быть.
За исключением случаев, когда я сортирую столбцы. Я попытался заставить его заново выполнить CheckBoxes (как прежде) сразу после того, как он отсортировал столбец, но он не работал. Мое лучшее предположение, что он не сразу создает контейнеры после сортировки..
Есть ли способ сказать, когда контейнеры заканчиваются для ListView?
1 ответ
Если вы свяжете свой флажок свойство IsChecked с логическим свойством в контексте данных, то у вас не будет этой проблемы.
Цель VirtualizingStackPanel - уменьшить использование памяти, не создавая ListItem без необходимости.
По сути, вам необходимо переместить сторону данных флажка подальше от элемента управления.