2011-03-10 10 views
1

그 안에 항목이있는 그룹이 있는데 그 그룹에 하위 그룹이 있기를 바랍니다.C# WPF Toolkit DataGrid - 그룹 내부 그룹?

주요 그룹 : "윈도우", "리눅스", "맥"과 하위 그룹 : "데이터", "기본 기능", "고급"

하위 그룹은 사람이 될 것입니다 행 항목이 포함됩니다. 또한 각 주 그룹마다 다른 하위 그룹이있을 수 있습니다.

어떻게하면됩니까?

여기 내 코드의 일부이다 : 우리는 "IsBottomLevel"가 아니라 "레벨"이 때문에

<Window.Resources> 
    <CollectionViewSource x:Key="OSGroups"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="os"/> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 

    <Style x:Key="GroupContainerStyle" TargetType="{x:Type GroupItem}"> 
     <Style.Resources> 
      <LinearGradientBrush x:Key="OutBrush" StartPoint="0,0" EndPoint="0,1"> 
       <GradientStop Offset="0" Color="#FEB74B"/> 
       <GradientStop Offset="1" Color="#F19201"/> 
      </LinearGradientBrush> 
     </Style.Resources> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True" Background="{StaticResource OutBrush}" BorderThickness="0"> 
         <Expander.Header> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto"/> 
           </Grid.ColumnDefinitions> 

           <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0,0,10,0"> 
            <TextBlock Text="{Binding Path=Name}"/> 
           </StackPanel> 
          </Grid> 
         </Expander.Header> 
         <ItemsPresenter /> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <wpfToolkit:DataGrid.GroupStyle> 
      <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}"> 
       <GroupStyle.Panel> 
        <ItemsPanelTemplate> 
         <wpfToolkit:DataGridRowsPresenter/> 
        </ItemsPanelTemplate> 
       </GroupStyle.Panel> 
      </GroupStyle> 
     </wpfToolkit:DataGrid.GroupStyle> 
     <wpfToolkit:DataGrid.Columns> 
      <wpfToolkit:DataGridTextColumn Header="Command" Binding="{Binding Path=command}" /> 
      <wpfToolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Path=description}" /> 
     </wpfToolkit:DataGrid.Columns> 
    </wpfToolkit:DataGrid> 
</Grid> 

답변

1

주, 들여 쓰기는 단지 하나 개의 서브 그룹으로 작동합니다.

<CollectionViewSource x:Key="OSGroups"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="os"/> 
      <PropertyGroupDescription PropertyName="subGroup"/> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
    <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True"> 
         <Expander.Style> 
          <Style TargetType="{x:Type Expander}"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding IsBottomLevel}" Value="True"> 
             <Setter Property="Margin" Value="20,0,0,0" /> 
            </DataTrigger> 

           </Style.Triggers> 
          </Style> 
         </Expander.Style> 
         <Expander.Header> 
          <TextBlock Text="{Binding Name}"/> 
         </Expander.Header> 
         <ItemsPresenter Margin="-10,0,0,0" /> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
0

DataGrid.GroupStyle 요소 안에 스타일을 정의 할 수 있습니다. 아래 xaml을 고려해보십시오. 두 그룹 컨테이너 스타일, 즉 GroupContainerStyleSecondGroupContainerStyle을 정의했습니다. 이제 주 그룹 (1 레벨) GroupConstainerStyle이 적용되며 하위 그룹 (2 레벨) SecondGroupContainerStyle이 자동으로 적용됩니다.

SecondGroupContainerStyle에서 spasrto의 수행 방식과 같은 들여 쓰기를 변경할 수 있습니다.

<wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <wpfToolkit:DataGrid.GroupStyle> 
     <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}"> 
      <GroupStyle.Panel> 
       <ItemsPanelTemplate> 
        <wpfToolkit:DataGridRowsPresenter/> 
       </ItemsPanelTemplate> 
      </GroupStyle.Panel> 
     </GroupStyle> 

     <GroupStyle ContainerStyle="{StaticResource SecondGroupContainerStyle}"> 
      <GroupStyle.Panel> 
       <ItemsPanelTemplate> 
        <wpfToolkit:DataGridRowsPresenter/> 
       </ItemsPanelTemplate> 
      </GroupStyle.Panel> 
     </GroupStyle>   
    </wpfToolkit:DataGrid.GroupStyle> 

</wpfToolkit:DataGrid>