2015-02-06 26 views
6

我有一個列表視圖控件分組和排序。Wpf ListView是否可以將組項目排序爲與組標題不同?

組標題是按降序排列的日期。

我想了解如何按升序排列每個組頭下的分組項,但無法弄清楚如何完成它或者甚至可以使用ListView。

以下是我目前使用的XAML。

注意:ScheduledItemSearchResults是ScheduleItems的可觀察集合,每個項目都有一個Title和一個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

'SortDescriptions'應該適用於分組中的組和項目。它出什麼問題了? – 2015-02-07 15:50:04

+0

排序說明按日期降序排序集合中的所有項目這會導致組標題排序正確。但我想按日期升序排序每個組下的項目。所以我想要一個不同的描述!?爲每個組的項目。 – John 2015-02-07 17:30:21

回答

12

你可以在一個CollectionViewSource幾個SortDescriptions元素:

<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> 

附:我不太清楚你想如何排序,但如果你排序第一組,然後它應該工作。

+0

謝謝,這是我之後排序的反面,但它是正確的答案。 – John 2015-02-07 19:05:59