2015-02-06 6 views
6

Mam kontrolę widoku listy z grupowaniem i sortowaniem.Wpf ListView Czy można zamówić elementy grupy inaczej niż w nagłówkach grup?

Nagłówki grup są datami w porządku malejącym.

Próbuję dowiedzieć się, jak uporządkować pogrupowane pozycje pod nagłówkiem każdej grupy w kolejności rosnącej, ale nie mogę wymyślić, jak to zrobić, lub jeśli jest to możliwe z ListView.

Oto XAML, które dotychczas miałem.

Uwaga: ScheduledItemSearchResults to obserwowalna kolekcja obiektów ScheduleItems, z których każda ma właściwość Title i ScheduleDate.

<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

"Funkcja SortDescriptions" powinna działać w celu sortowania grup i elementów w grupach. Co jest z tym nie tak? –

+0

Opis sortowania sortuje wszystkie elementy w kolekcji w kolejności malejącej według daty. Powoduje to, że nagłówki grup są sortowane poprawnie. Ale chcę posortować elementy w każdej grupie w kolejności rosnącej. Więc chcę inny opis sortowania !? dla przedmiotów w każdej grupie. – John

Odpowiedz

12

Można mieć kilka SortDescriptions elementów w jednym 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> 

PS: Nie wiem, jak dokładnie chcesz to posortować, ale jeśli sortujesz pierwsze grupy, a potem przedmioty, to powinno działać.

+0

Dziękuję, To była odwrotność sortowania, którego szukałem, ale jest to poprawna odpowiedź. – John

Powiązane problemy