简体   繁体   English

在WPF中对ListView进行排序

[英]Sorting ListView in WPF

I tried to sort my listview like this: http://www.wpf-tutorial.com/listview-control/listview-how-to-column-sorting/ 我试图像这样对我的列表视图进行排序: http : //www.wpf-tutorial.com/listview-control/listview-how-to-column-sorting/

XAML: XAML:

<ListView x:Name="lvComputers" HorizontalAlignment="Left" Height="440" Margin="10,43,0,0" VerticalAlignment="Top" Width="560" SelectionChanged="lvComputers_SelectionChanged">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="120" DisplayMemberBinding="{Binding computerName}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Tag="Computername" Click="lvComputersColumnHeader_Click">Computername</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn Width="80" DisplayMemberBinding="{Binding operatingSystem}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Tag="Betriebssystem" Click="lvComputersColumnHeader_Click">Betriebssystem</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

C#: C#:

private void loadComputers()
{
    lvComputers.ItemsSource = mainController.getComputers();
    lvComputers.Items.SortDescriptions.Add(new SortDescription("Computername", ListSortDirection.Ascending));
    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvComputers.ItemsSource);
    view.SortDescriptions.Add(new SortDescription("Computername", ListSortDirection.Ascending));
    view.Filter = UserFilter;

}

private void lvComputersColumnHeader_Click(object sender, RoutedEventArgs e)
{
    GridViewColumnHeader column = (sender as GridViewColumnHeader);
    string sortBy = column.Tag.ToString();
    if (listViewSortCol != null)
    {
        AdornerLayer.GetAdornerLayer(listViewSortCol).Remove(listViewSortAdorner);
        lvComputers.Items.SortDescriptions.Clear();
    }

    ListSortDirection newDir = ListSortDirection.Ascending;
    if (listViewSortCol == column && listViewSortAdorner.Direction == newDir)
        newDir = ListSortDirection.Descending;

    listViewSortCol = column;
    listViewSortAdorner = new SortAdorner(listViewSortCol, newDir);
    AdornerLayer.GetAdornerLayer(listViewSortCol).Add(listViewSortAdorner);
    lvComputers.Items.SortDescriptions.Add(new SortDescription(sortBy, newDir));
}

"getComputers" returns a list of computers based on this class: “ getComputers”返回基于此类的计算机列表:

public class Computers
{
    public String computerName { get; set; }
    public String operatingSystem { get; set; }
}

UserFilter is for a searchbox. UserFilter用于搜索框。 But for some reason the sorting wont work. 但是由于某种原因,排序将无法进行。

I tried to add this 我试图添加这个

lvComputers.Items.SortDescriptions.Add(new SortDescription("Computername", ListSortDirection.Ascending));

to

loadComputers();

but it doesnt work either. 但它也不起作用。

what am i doing wrong? 我究竟做错了什么?

SortDescription strings are case sensitive: SortDescription字符串区分大小写:

 new SortDescription("Computername", ...

should be 应该

 new SortDescription("computerName"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM