2008-10-21 2 views
3

Как я могу переключаться между GroupStyles на ListView на основе некоторых условий во время выполнения? Например, мне нужно использовать значение по умолчанию для элементов, у которых есть GroupStyle Заголовок заголовка null, а если оно не равно null, используйте тему GroupStyle? Я пробовал GroupStyleSelector, и он не работает, потому что он работает для многоуровневой группировки, и в моем случае у меня есть только одна группа уровней.Изменение (включение/выключение) GroupStyle в ListView для разных предметов категории

Если да, то как?

Пользовательские 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> 

Большое спасибо.

С уважением, Vlad.

ответ

4

ОК,

Я нашел решение для этого. В основном мне нужно было создать DataTrigger и проверить категорию в нем, и если он соответствует, используйте другой GroupStyle. Вот пример:

<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

Как достичь такого же результата без использования DataTrigger – Tilak

Смежные вопросы