2009-04-15 4 views
2

Iam은 Listbox 컨트롤을 사용할 때 성능 문제가있는 Silverlight 2를 사용합니다. 데이터 바인딩을 위해 3-4 초가 걸리는 약 500 개의 레코드 개체 목록을 바인딩하고 있습니다.Silverlight 2의 거대한 데이터와리스트 박스 성능 문제

그러나 DataGrid에는이 문제가 없습니다.

누구나 Listbox의 성능 문제를 개선하기위한 답이 있습니까?

답변

2

응용 프로그램에 대한 추가 컨텍스트를 알지 못하면 몇 가지 문제가 발생할 수 있습니다. 첫 번째로 염두에 두어야 할 것은 매우 "무거운"시각 트리가 있다는 것입니다. ListBox의 각 항목은 시각적 개체의 그래프를 만들 것입니다. 더 많이 가질수록 렌더링하는 데 오래 걸립니다.

이러한 항목이 화면에 표시되지 않으면 Silverlight에서 해당 항목을 렌더링하는 작업을 계속 수행하고 있습니다. 기본적으로 이것은 Layout() 및 Measure() 패스가 데이터 바인딩 된 모든 ListBox 항목에 대해 수행되고 있음을 나타냅니다 (표시되지 않더라도).

트릭은 가상화를 사용하여 Silverlight에서 컨트롤의 표시 영역 내에서 보이지 않는 컨트롤의 레이아웃/계수 패스를 강제로 수행하지 않도록하는 것입니다.

다음은 StackPanel에서이를 수행하는 방법을 설명하는 블로그 게시물입니다. 그것은 목록 상자에이 추상에 많이 복용해서는 안 또는 더 나은 아직, 당신은 단순히 목록 상자 가상화 스택 패널 컨트롤 컨테이너를 만들 수 그리고 당신은 :

http://blogs.msdn.com/uberdemo/archive/2009/02/18/a-virtualizedstackpanel-control-in-silverlight-2-0.aspx

4

이유 할 것 DataGrid는 UI 가상화를 지원하며 ListBox는 지원하지 않습니다. 즉, DataGrid는 표시되는 항목의 시각적 요소 만 만드는 반면 ListBox는 모든 항목의 시각적 요소를 만듭니다. 매우 큰 항목 목록에서 선택해야 할 때마다 ListBox 대신 DataGrid를 사용하십시오. DataGrid의 스타일을 지정하고 TemplateColumn을 사용하여 ListBox처럼 보이게 할 수 있습니다.

마이클