WPF ListView组和排序

时间:2015-12-16 06:59:15

标签: c# wpf listview

我正在尝试将列表中的项目分组,并将它们从最旧到最新排序。分组工作完美,它只是不想反转这个列表。

WPF代码:

            <ListView x:Name="lst_orders" Margin="5" GridViewColumnHeader.Click="results_Click">
            <ListView.Resources>
                <Style TargetType="ListViewItem">
                    <Style.Triggers>
                        <Trigger Property="IsKeyboardFocusWithin" Value="true">
                            <Setter Property="IsSelected" Value="true" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListView.Resources>
            <ListView.View>
                <GridView>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button x:Name="goto_parts" Content="Show parts" Width="AUTO" Padding="2" Margin="2" Background="#FF179917" Click="goto_parts_Click"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Order ID" Width="100" DisplayMemberBinding="{Binding fullOrderId}" />
                    <GridViewColumn Header="Job Status" Width="100" DisplayMemberBinding="{Binding status}" />
                    <GridViewColumn Header="Order Type" Width="150" DisplayMemberBinding="{Binding orderType}" />
                    <GridViewColumn Header="Customer Notes" Width="250" DisplayMemberBinding="{Binding notes}" />
                    <GridViewColumn Header="Admin Notes" Width="250" DisplayMemberBinding="{Binding adminNotes}" />
                    <GridViewColumn Header="Production Notes" Width="100" DisplayMemberBinding="{Binding production_notes}" />
                </GridView>
            </ListView.View>
            <ListView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Background="Gray">
                                <TextBlock Text="Days: " FontSize="18" FontWeight="Bold"/>
                                <TextBlock Text="{Binding Name}" FontSize="18" FontWeight="Bold"/>
                                <TextBlock Text=" Systems: " FontSize="18" FontWeight="Bold"/>
                                <TextBlock Text="{Binding ItemCount}" FontSize="18" FontWeight="Bold"/>
                            </StackPanel>
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                </GroupStyle>
            </ListView.GroupStyle>
        </ListView>

C#代码:

        ICollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lst_orders.ItemsSource);
        PropertyGroupDescription groupDescription = new PropertyGroupDescription("daysOld");

        view.GroupDescriptions.Add(groupDescription);
        view.SortDescriptions.Add(new SortDescription("daysOld", ListSortDirection.Descending));

        lst_orders.ItemsSource = view;

daysOld是计算今天日期和订单日期之间差异的属性,效果很好,但我希望从最高数字到最低数字看到它。图片展示了我得到的东西,我想要扭转它。

enter image description here

1 个答案:

答案 0 :(得分:1)

你的代码是正确的。我做了一个测试。可以在视图中看到:

C#:

List<SomeClass> list = new List<SomeClass>();
Random rnd = new Random();
for (int i = 0; i < 10; i++)
{              
   list.Add(new SomeClass() { DaysOld = DateTime.Now.Add(new TimeSpan(0, rnd.Next(25), 0))});
}
ICollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(list);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("daysOld");
view.GroupDescriptions.Add(groupDescription);
view.SortDescriptions.Add(new SortDescription("DaysOld",   ListSortDirection.Descending));
listBox.ItemsSource = view;
listBox.DisplayMemberPath = "DaysOld";

XAML:

<ListBox Name="listBox"/>        

型号:

public class SomeClass
{
    public DateTime DaysOld { get; set; }
}

图像:

enter image description here