2015-02-06 5 views
6

Ich habe eine List View Control mit Gruppierung und Sortierung.Wpf ListView Ist es möglich, die Gruppenelemente anders als die Gruppenköpfe zu sortieren?

Die Gruppenüberschriften sind Daten in absteigender Reihenfolge.

Ich versuche herauszufinden, wie die gruppierten Elemente unter jedem Gruppenkopf in aufsteigender Reihenfolge sortiert werden, aber kann nicht herausfinden, wie es erledigt wird oder ob es sogar mit ListView möglich ist.

Hier ist der XAML, den ich bisher habe.

Hinweis: ScheduledItemSearchResults ist eine beobachtbare Auflistung von ScheduleItems, für die ein Element eine Title- und eine ScheduleDate-Eigenschaft besitzt.

<Grid x:Name="TxScheduleItemResults" 
       Grid.Column="1"> 
      <Grid.Resources> 
       <CollectionViewSource Source="{Binding ScheduledItemSearchResults}" x:Key="scheduledItems"> 
        <CollectionViewSource.SortDescriptions> 
         <scm:SortDescription PropertyName="Value.ScheduleDateTime" Direction="Descending"/> 
        </CollectionViewSource.SortDescriptions> 
        <CollectionViewSource.GroupDescriptions> 
         <dat:PropertyGroupDescription PropertyName="Value.ScheduleDateTime.Date" /> 
        </CollectionViewSource.GroupDescriptions> 
       </CollectionViewSource> 
      </Grid.Resources> 

      <ListView x:Name="ScheduledItemResultsList" 
         Style="{StaticResource TransparentListViewStyle}" 
         ItemContainerStyle="{StaticResource alternatingListViewItemStyle}" 
         AlternationCount="2" 
         ItemsSource="{Binding Source={StaticResource scheduledItems}}" 
         > 

       <ListView.View> 
        <GridView> 
         <GridViewColumn Header="Scheduled Items" 
             Width="{Binding ElementName=ScheduledItemResultsList, Path=ActualWidth}" 
             > 
          <GridViewColumn.HeaderTemplate> 
           <DataTemplate> 
            <TextBlock Style="{StaticResource ModuleGroupHeader}" 
               Text="{Binding}" 
               /> 
           </DataTemplate> 
          </GridViewColumn.HeaderTemplate> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <StackPanel Orientation="Horizontal"> 
             <TextBox Text="{Binding Value.Title}" Width="200"/> 
             <TextBox Text="{Binding Value.ScheduleDateTime, StringFormat={}{0:HH:mm:ss}}" Width="120"/> 
            </StackPanel> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
        </GridView> 
       </ListView.View> 
       <ListView.GroupStyle> 
        <GroupStyle> 
         <GroupStyle.ContainerStyle> 
          <Style TargetType="{x:Type GroupItem}"> 
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate> 
              <Expander IsExpanded="True"> 
               <Expander.Header> 
                <StackPanel Orientation="Horizontal"> 
                 <TextBlock Text="{Binding Path=Items[0].Value.ScheduleDateTime.Date, StringFormat={}{0:dd/MM/yyyy}}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" /> 
                 <TextBlock Text="{Binding ItemCount}" FontSize="22" Foreground="Green" FontWeight="Bold" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" /> 
                 <TextBlock Text=" item(s)" FontSize="22" Foreground="Silver" FontStyle="Italic" VerticalAlignment="Bottom" /> 
                </StackPanel> 
               </Expander.Header> 
               <ItemsPresenter /> 
              </Expander> 
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </GroupStyle.ContainerStyle> 
        </GroupStyle> 
       </ListView.GroupStyle> 
      </ListView> 
     </Grid> 
+0

'SortDescriptions' sollte zum Sortieren von Gruppen und Elementen in Gruppen verwendet werden. Was stimmt damit nicht? –

+0

Die Sortierbeschreibung sortiert alle Elemente in der Sammlung in absteigender Reihenfolge. Dies führt dazu, dass die Gruppenköpfe korrekt sortiert werden. Aber ich möchte die Elemente unter jeder Gruppe in aufsteigender Reihenfolge sortieren. Also ich möchte eine andere Sortierbeschreibung !? für Artikel in jeder Gruppe. – John

Antwort

12

können Sie haben mehrere SortDescriptions Elemente in einem CollectionViewSource:

<CollectionViewSource Source="{Binding ScheduledItemSearchResults}" x:Key="scheduledItems"> 
       <CollectionViewSource.SortDescriptions> 
        <!--This will sort groups--> 
        <scm:SortDescription PropertyName="Value.ScheduleDateTime.Date" /> 
        <!--This will items--> 
        <scm:SortDescription PropertyName="Value.ScheduleDateTime" Direction="Descending"/> 
       </CollectionViewSource.SortDescriptions> 
       <CollectionViewSource.GroupDescriptions> 
        <dat:PropertyGroupDescription PropertyName="Value.ScheduleDateTime.Date" /> 
       </CollectionViewSource.GroupDescriptions> 
      </CollectionViewSource> 

P. S. Ich verstehe nicht genau, wie genau Sie es sortieren wollen, aber wenn Sie zuerst Gruppen und dann Artikel sortieren, sollte es funktionieren.

+0

Danke, das war die Umkehrung der Sortierung, nach der ich gesucht habe, aber es ist die richtige Antwort. – John

Verwandte Themen