2011-03-22 2 views
1

CollectionViewSource의 그룹을 사용하여 세부 정보 모음의 가상 "집계"보기를 표시합니다. 기본적으로 샘플이 여기에 본 : ListBox Grouping, Sorting, Subtotals and Collapsible RegionsIValueConverter에 의해 생성 된 속성에서 CollectionView의 그룹 정렬

이 예제의 관련 부분을 요약하면, 당신의 그룹 그렇게처럼 ValueConverter를 통해 자신의 세부 사항에서 집계 속성을 노출 할 수 있습니다 :

<ListBox.GroupStyle> 
    <GroupStyle> 
    <GroupStyle.ContainerStyle> 
     <Style TargetType="{x:Type GroupItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
      <ControlTemplate TargetType="{x:Type GroupItem}"> 
       <Grid> 
       <!--[..Snip..]--> 
        <TextBlock Grid.Column="4" 
          Text="{Binding StringFormat=\{0:C\}, 
          Converter={StaticResource groupItemSalesSubtotalConverter}}" 
          TextAlignment="Right" /> 
       <!--[..Snip..]--> 
       </Grid> 
      </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     </Style> 
    </GroupStyle.ContainerStyle> 
    </GroupStyle> 
</ListBox.GroupStyle> 

참고 TextBlock의 위입니다 GroupItem의 바인딩에 직접 바인딩되므로 컨버터는 전체 CollectionViewGroup과 그 하위를 수신하고 세부 정보로 드릴 다운하여 그룹의 항목 합계를 합계 할 수 있습니다.

이 값은 그 자체가 속성이 아니기 때문에 문제는, 소계로 그룹을 정렬 할 수 있습니까?

이것은 분명히 SortDescription으로 처리 할 수 ​​없습니다. ListCollectionView의 CustomSort 속성 (이 경우 구현은 can be used 임)을 보았지만 어떻게 표시되지 않습니까? Compare() 메서드는 그룹화에 관계없이 세부 항목 쌍을받으며 부분합을 결정할 수 없습니다. 그 시점에서.

이 그룹을 고유 한 권한으로 만들지 않고도 (즉, 요약 수준에서는 CollectionView를, 세부 수준에서는 다른 CollectionView를 사용하지 않고) 정렬 할 수 있습니까?

답변

0

ItemsControl에 표시된 그룹의 순서는 컬렉션의 항목 정렬 순서에 따라 결정됩니다.

그래서, 일반적으로, 당신은 (당신이 다른 속성으로 그룹을 정렬 할 ... 당신은 그룹 내에서 달성하고자하는 순서에 의해 두 번째 다음 경우

을 그룹화 속성에 의해 처음으로 정렬 및 것 해당 그룹의 항목 인 경우 합계). 이 작업을 쉽게 수행 할 수있는 유일한 방법은 항목에 새 속성을 추가하여 각 그룹의 합계 (또는 필요한 순서에 따라 임의의 정렬 키)를 반환하는 것입니다. 그런 다음 해당 속성별로 컬렉션을 정렬 할 수 있으며 필요한 그룹 순서가 지정됩니다.

코드에서 그룹화를 계산할 때 컬렉션의 각 항목에 대한 그룹 합계를 설정/계산해야하기 때문에 이는 그리 효율적이지 않거나 우아하지 않습니다. 그러나, 나는 더 좋은 방법을 모른다.