WPF中ListView排序实现「建议收藏」

WPF中ListView排序实现「建议收藏」要实现ListView点击某一列进行排序,需要处理列点击事件<Windowx:Class=”ListViewSort.MainWindow”xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”Title=”MainWindow”Height=”300″Width=”300″…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

要实现ListView点击某一列进行排序,需要处理列点击事件 

<Window x:Class="ListViewSort.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="300" Width="300" Loaded="Window_Loaded">
    <Grid>
        <ListView GridViewColumnHeader.Click="GridViewColumnHeader_Click" Margin="2" ItemsSource="{Binding Path=DataList}" >
            <ListView.View>
                <GridView>
                    <GridViewColumn  Header="ID" DisplayMemberBinding="{Binding ID}" />
                    <GridViewColumn  Header="Name" DisplayMemberBinding="{Binding Name}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

下面的代码支持ListView 多个列点击排序,并会记住点击过的每个列的排序方向 。

 private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e) {
            ListView view = sender as ListView;
            if (view == null) {
                return;
            }
            if (e.OriginalSource is GridViewColumnHeader) {
                //获取点击列
                GridViewColumn clickedColumn = (e.OriginalSource as GridViewColumnHeader)?.Column;
                if (clickedColumn != null) {
                    //获取该列绑定的属性
                    string bindingProperty = (clickedColumn.DisplayMemberBinding as Binding)?.Path.Path;
                    if (bindingProperty == null) {
                        return;
                    }
                    SortDescriptionCollection sdc = view.Items.SortDescriptions;
                    ListSortDirection sortDirection = ListSortDirection.Ascending;
                    foreach (var sd in sdc) {
                        if (sd.PropertyName.Equals(bindingProperty)) {
                            //改变排序方向
                            sortDirection = (ListSortDirection) ((((int) sd.Direction) + 1) % 2);
                            //取得排序方向后,删除当前的SortDescription
                            sdc.Remove(sd);
                            break;
                        }
                    }
                    //添加新的SortDescription到SortDescriptions首位,使之生效
                    sdc.Insert(0,new SortDescription(bindingProperty, sortDirection));
                }
            }
        }

排序是根据列的类型来的,就ID列来说,int类型的排序结果是2,3,17,而如果你把该列
类型改为string,结果就会是17,2,3,如果你定义列的时候不加类型,默认是string,如
果是自定义类型,那么请继承IComparable接口,实现CompareTo方法。  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186456.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ASP.NET MVC 教程学习「建议收藏」

    ASP.NET MVC 教程学习「建议收藏」1.Why:为什么需要ASP.NETMVC本章主要为大家汇总了为什么学习Asp.netMVC替代WebForms,产生ASP.NETMVC的需求是什么,只有更好的理解了为什么需要MVC,出于什么目的开发的MVC框架,用MVC框架来弥补什么或是提升什么,才能利用其开发出最高效最满意的Web系统。 为什么会出现ASP.NET平台下的MVC框架?说明:本文摘自InfoQ,是作者JonathanAllen2007年发布的一篇的文章,首先描述了WebForms的优

    2022年7月22日
  • A4988与42步进电机

    A4988与42步进电机A4988电机驱动板引脚VMOT:电源正(8~35V),供电机GND:电机接地2B,2A:电机绕组2控制引脚1A.1B:电机绕组1控制引脚VDD:驱动板电源正(3~5V)GND:驱动板地ENABLE:引脚低电平,A4988才能进行电机驱动工作(悬空为默认状态,可以正常工作),高电平,A4988将不会经行电机驱动工作MS1,MS2,MS3:用来改变驱动模式具体如图REST:低电平…

    2022年6月15日
  • MFC进度条编程「建议收藏」

    MFC进度条编程「建议收藏」1.进度条的主要功能进度条控制(ProgressControl)主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充。进度条控制在MFC类库中的封装类为CProgressCtrl,通常仅作为输出类控制,所以其操作主要是设置进度条的范围和当前位置,并不断地更新当前位置。进度条的范

    2022年7月12日
  • Prometheus monitor RabbitMQ

    Prometheus monitor RabbitMQ

    2021年7月3日
  • 向域中批量创建用户

    向域中批量创建用户

    2021年5月27日
  • spfa(链式前向星)+dijkstra(链式前向星)

    spfa(链式前向星)+dijkstra(链式前向星)链式前向星链式前向星可以存图,它存图的方式是:将任意一个节点的所有临边按输入顺序依次连接起来将任意一个节点的所有临边按输入顺序依次连接起来将任意一个节点的所有临边按输入顺序依次连接起来然后头节点(数组)存的是最后一个临边的地址然后头节点(数组)存的是最后一个临边的地址然后头节点(数组)存的是最后一个临边的地址inthead[maxn];//head[i]中i是u->v中的u,he…

    2022年10月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号