[Silverlight] PagedCollectionView를 사용한 리스트 그룹 표시

2009. 10. 19. 08:52WEB/Silverlight

평범한 리스트 형식을 그룹으로 묶어 사용자에게 새로운 경험을 제시해봄

 

  • 자료의 양이 많고 필요한 정보를 찾기 위해 많은 옵션을 선택 하는건 비효율적 이라 생각 -> 중요한 핵심 그룹으로 정보를 색인해주면

        사용자에게 새로운 경험을 제시할 수 있을 것이라 생각함

 

  • 실버라이트로 시스템 개발을 진행함에 있어 리스트 정보의 변화를 생각해봄

 

1. 리스트로 표현할 데이터(List, ObservableCollection)를 PagedCollectionView로 변환

 

using System.Windows.Data; <-참조

dgTICompanyList.ItemsSource = tiCompaniesDataAccessExtendList;

 

▼ 변환

 

PagedCollectionView pagedCollectionView = new PagedCollectionView(tiCompaniesDataAccessExtendList);

 

2. 그룹화할 Property 를 추가(요구사항에 맞게 조절)

 

pagedCollectionView.GroupDescriptions.Add(new PropertyGroupDescription("StrCompanyTypeCodeName"));

pagedCollectionView.GroupDescriptions.Add(new PropertyGroupDescription("StrVATTypeCodeName"));

 

3. 리스트의 아이템 소스를 지정

 

dgTICompanyList.ItemsSource = pagedCollectionView;

 

4. 1차 결과

 

 

 

보기 좋지 않다는 생각이 듦

(스타일을 적용해봄)

 

5. 스타일 적용 -> 그룹헤더의 수만큼 추가해주면 순서대로 스타일이 적용됨

 

<data:DataGrid.RowGroupHeaderStyles>

<!—첫번째 그룹 헤더 스타일 -->

<Style TargetType="data:DataGridRowGroupHeader">

<Setter Property="PropertyNameVisibility" Value="Collapsed" />

<Setter Property="Background" Value="#FF112255" />

<Setter Property="Foreground" Value="#FFEEEEEE" />

<Setter Property="SublevelIndent" Value="15" />

</Style>

<!—두번째 그룹 헤더 스타일 -->

<Style TargetType="data:DataGridRowGroupHeader">

<Setter Property="PropertyNameVisibility" Value="Collapsed" />

<Setter Property="Background" Value="#FFDBE5F1" />

</Style>

</data:DataGrid.RowGroupHeaderStyles>

 

6. 최종 결과

 

7. 이슈 사항

 

A. PagedCollectionView 자체에서 Linq 구문등과 같은 조건등을 줄 수 없음. 원본이 되는 데이터내에서 적절한 작업을 사용한 후 PagedCollectionView로 변환해야 함

 

B. 적절치 못한 사용은 자칫 사용자에게 혼란(복잡함, 난잡함 등)을 줄 수 있으며, 거부감을 주기 쉬움

 

C. 리스트를 변환하는 작업은 시스템에 부하를 발생-> 이것뿐만 아니라 서비스로 통신되는 데이터(특히 리스트 타입이나 대량의 자료 등) 변환 및 사용에 있어 서버상의 부하로 부담할지 아니면 사용자의 부하로 부담할지에 대한 논의가 필요