Iam은 Listbox 컨트롤을 사용할 때 성능 문제가있는 Silverlight 2를 사용합니다. 데이터 바인딩을 위해 3-4 초가 걸리는 약 500 개의 레코드 개체 목록을 바인딩하고 있습니다.Silverlight 2의 거대한 데이터와리스트 박스 성능 문제
그러나 DataGrid에는이 문제가 없습니다.
누구나 Listbox의 성능 문제를 개선하기위한 답이 있습니까?
Iam은 Listbox 컨트롤을 사용할 때 성능 문제가있는 Silverlight 2를 사용합니다. 데이터 바인딩을 위해 3-4 초가 걸리는 약 500 개의 레코드 개체 목록을 바인딩하고 있습니다.Silverlight 2의 거대한 데이터와리스트 박스 성능 문제
그러나 DataGrid에는이 문제가 없습니다.
누구나 Listbox의 성능 문제를 개선하기위한 답이 있습니까?
응용 프로그램에 대한 추가 컨텍스트를 알지 못하면 몇 가지 문제가 발생할 수 있습니다. 첫 번째로 염두에 두어야 할 것은 매우 "무거운"시각 트리가 있다는 것입니다. ListBox의 각 항목은 시각적 개체의 그래프를 만들 것입니다. 더 많이 가질수록 렌더링하는 데 오래 걸립니다.
이러한 항목이 화면에 표시되지 않으면 Silverlight에서 해당 항목을 렌더링하는 작업을 계속 수행하고 있습니다. 기본적으로 이것은 Layout() 및 Measure() 패스가 데이터 바인딩 된 모든 ListBox 항목에 대해 수행되고 있음을 나타냅니다 (표시되지 않더라도).
트릭은 가상화를 사용하여 Silverlight에서 컨트롤의 표시 영역 내에서 보이지 않는 컨트롤의 레이아웃/계수 패스를 강제로 수행하지 않도록하는 것입니다.
다음은 StackPanel에서이를 수행하는 방법을 설명하는 블로그 게시물입니다. 그것은 목록 상자에이 추상에 많이 복용해서는 안 또는 더 나은 아직, 당신은 단순히 목록 상자 가상화 스택 패널 컨트롤 컨테이너를 만들 수 그리고 당신은 :
이유 할 것 DataGrid는 UI 가상화를 지원하며 ListBox는 지원하지 않습니다. 즉, DataGrid는 표시되는 항목의 시각적 요소 만 만드는 반면 ListBox는 모든 항목의 시각적 요소를 만듭니다. 매우 큰 항목 목록에서 선택해야 할 때마다 ListBox 대신 DataGrid를 사용하십시오. DataGrid의 스타일을 지정하고 TemplateColumn을 사용하여 ListBox처럼 보이게 할 수 있습니다.
마이클