WPF/.NET 4를 사용 중이고 VirtualizationStackPanel.VirtualizationMode = "Recycling"속성을 내 ListBox에 추가하면 동일한 목록이 나타납니다 스크롤 할 때 반복되는 항목. 예를 들어 ListBox에 100 개의 항목이 있고 10 개의 항목이 한 번에 표시되어 있다고 가정 해 보겠습니다. ListBox가 처음로드 될 때 항목 1 - 10이 표시되지만 나머지 항목 11 - 100을 보려면 스크롤을 아래로 시작하면 항목 1 - 10이 계속 스크롤되어 반복되어 항목을 볼 수 없게됩니다. 11 - 100. 재활용을 표준으로 다시 변경하면 모든 것이 올바르게 작동하지만 스크롤이 너무 느립니다 (내 ListItem은 여러 이미지, 텍스트 필드 및 버튼이 포함 된 매우 복잡합니다). 재활용 기능이 켜져 있으면 스크롤 속도가 빠르지 만 항목 1 - 10 만 볼 수 있습니다. 무엇이 잘못되었거나 해결하는 방법에 대한 아이디어가 있습니까? 미리 감사드립니다.WPF ListBox VirtualizingStackPanel.VirtualizationStackPanel.VirtualizationMode = "재활용"으로 인해 동일한 목록 항목이 항상 나타납니다.
4
A
답변
5
재활용 모드는 이름에서 알 수 있듯이 렌더링 된 ListBoxItem을 다시 사용하여 작동합니다. ListBox 항목이 더 이상 스크롤되지 않은 항목을 표시하는 데 필요하지 않으면 ListBox 항목을 다시 사용하여보기로 스크롤 한 항목을 표시합니다.
ListBoxItem이 표시 할 내용을 변경하기 위해 ListBox는 단순히 DataContext 속성을 새 항목으로 설정합니다. 이를 위해서는 ListBoxItem의 내용이 DataContextChanged 이벤트에 올바르게 응답해야합니다. 데이터 바인딩을 사용하여 컨트롤을 채우는 경우에만이 작업이 자동으로 수행됩니다. 그러나 주석이 암시하는 것처럼 코드 숨김을 사용하여 속성을 업데이트하는 경우 이벤트 처리 코드가 작업을 수행하는지 확인해야합니다.
상품이 데이터에 저장 되었습니까? 제본은 어떻게 이루어 집니까? ViewModel을 통해? 또한 이러한 항목은 Data/ControlTemplate, ItemContainer 또는 UserControl을 통해 생성됩니까? – CodeWarrior
일부 ListBox는 데이터 바인딩이되어 있고 다른 일부는 코드 숨김으로 설정된 ItemsSource 만 있지만이 두 가지 문제가 있습니다. 그리고 그들 모두는 DataTemplate을 사용하여 값이 ListBoxItem의 값을 사용하여 채워지는 고객 사용자 정의 컨트롤을 표시합니다. – deadlydog