2008-10-21 13 views
3

Comment puis-je basculer entre GroupStyles pour un ListView en fonction de certaines conditions lors de l'exécution? Par exemple, je dois utiliser par défaut pour les éléments qui ont GroupStyle nom d'en-tête null, et si ce n'est pas null, alors utilisez le thème personnalisé GroupStyle? J'ai essayé GroupStyleSelector, et cela ne fonctionne pas, car cela fonctionne pour le regroupement multi-niveau, et dans mon cas, je n'ai qu'un seul niveau de regroupement.Modification (activer/désactiver) GroupStyle dans ListView pour différents éléments de catégorie

Si oui, alors comment?

sur mesure GroupStyle:

<Style x:Key="grouping" 
      TargetType="{x:Type GroupStyle}"> 
     <Setter Property="ContainerStyle"> 
      <Setter.Value> 
       <Style TargetType="{x:Type GroupItem}"> 
        <Setter Property="Margin" 
          Value="0,0,0,5" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type GroupItem}"> 
           <Expander IsExpanded="False" 
              BorderBrush="#FFA4B97F" 
              BorderThickness="0,0,0,1"> 
            <Expander.Header> 
             <DockPanel> 
              <TextBlock FontWeight="Bold" 
                 Text="{Binding Name}" 
                 Margin="0" 
                 Width="250" /> 
              <TextBlock FontWeight="Bold" 
                 Text="{Binding Path=Items[0].StartTime, StringFormat=T}" /> 
             </DockPanel> 
            </Expander.Header> 
            <Expander.Content> 
             <ItemsPresenter /> 
            </Expander.Content> 
           </Expander> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </Setter.Value> 
     </Setter>      
    </Style> 

Merci beaucoup.

Sincèrement, Vlad.

Répondre

4

OK,

J'ai trouvé une solution pour cela. Fondamentalement, j'avais besoin de construire DataTrigger et vérifier la catégorie, et si elle correspond, utiliser GroupStyle différent. Voici l'exemple:

<ControlTemplate TargetType="{x:Type GroupItem}" 
        x:Key="defaultGroup"> 
     <ItemsPresenter /> 
    </ControlTemplate> 

    <ListView.GroupStyle> 
    <GroupStyle >        
    <GroupStyle.ContainerStyle> 
    <Style TargetType="{x:Type GroupItem}"> 
     <Setter Property="Margin" 
     Value="0,0,0,5" /> 
     <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type GroupItem}"> 
     <Expander IsExpanded="False" 
      BorderBrush="Black" 
      BorderThickness="3" 
      Padding="5,1,1,5"> 
      <Expander.Header> 
      <DockPanel> 
      <TextBlock FontWeight="Bold" 
       Margin="0" 
       Width="250"> 
      <TextBlock.Text> 
       <MultiBinding StringFormat="{}{0} ({1} jobs)"> 
       <Binding Path="Name" /> 
       <Binding Path="ItemCount" /> 
       </MultiBinding> 
      </TextBlock.Text> 
      </TextBlock> 
      <TextBlock FontWeight="Bold" 
       Text="{Binding Path=Items[0].Category, StringFormat=T}" /> 
      </DockPanel> 
      </Expander.Header> 
      <Expander.Content> 
      <ItemsPresenter /> 
      </Expander.Content> 
     </Expander> 
     </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Items[0].Category}" 
      Value="ABC"> 
     <Setter Property="Template" 
      Value="{StaticResource defaultGroup}" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </GroupStyle.ContainerStyle> 
    </GroupStyle> 
    </ListView.GroupStyle> 
+0

Comment l'obtenir sans utiliser DataTrigger – Tilak