Виртуализирующая панель повторно использует элементы управления в ней и просто заменяет DataContext
за элементами управления при прокрутке.Это означает, что при прокрутке состояние элемента управления (например, IsChecked
) сбрасывается, если только это состояние не связано с чем-либо в DataContext.
Например, если видны только 10 элементов вашего 2000за один раз WPF будет отображать только около 14 из них (дополнительные элементы для буфера прокрутки) и просто повторно использовать эти 14 элементов при прокрутке и замене DataContext
за элементами управления.
Если вы отключите виртуализацию, вы отключите эту процедуру утилизации.Это означает, что WPF будет отображать 2000 элементов вместо 14, поэтому производительность настолько низкая.Это также означает, что флажки останутся проверенными, поскольку их состояние не сбрасывается.
Чтобы исправить эту проблему, я бы рекомендовал добавить свойство IsSelected
к вашему объекту пользователя и привязать к нему CheckBox.IsChecked
.