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)
上一篇 2022年10月3日 上午11:16
下一篇 2022年10月3日 上午11:36


相关推荐

  • Murmurhash 哈希算法 介绍与实现

    最近在项目代码中看到了一种hash算法,以前没有遇见过,在此记录下来。 一、介绍  MurmurHash是一种非加密型哈希函数,适用于一般的哈希检索操作。由AustinAppleby在2008年发明,并出现了多个变种,都已经发布到了公有领域(publicdomain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。—摘自w…

    2022年4月5日
    70
  • 3分钟告诉你如何成为一名黑客?|零基础到黑客入门指南,你只需要掌握这五点能力

    3分钟告诉你如何成为一名黑客?|零基础到黑客入门指南,你只需要掌握这五点能力三分钟带各位揭秘黑客究竟是什么,以及想要成为黑客都需要具备哪些能力?

    2022年6月4日
    51
  • 基于jeesit下的工作流开发步骤

    基于jeesit下的工作流开发步骤首先 jeesit 是开源的 OA 系统 采用的框架是 springMVC 和 mybatis 采用 shiro 安全验证 1 新建流程所属表 在数据库新建所需工作流的表之后 登录 jeesit 系统 在 代码生成 业务表配置 业务表添加 中设置字段列表 即把建好的数据库字段描述添加进去 以便随后的代码自动生成更加清楚 如图 2 生成代码 在 代码生成 业务表配置 生成方案配置 中配置即将要生成代

    2026年3月19日
    2
  • C语言冒泡法_冒泡编程c语言

    C语言冒泡法_冒泡编程c语言在考试前依然有很多同学不清楚冒泡法怎么用所以这期我专门整理了一下冒泡法的用法,供大家参考哦!

    2022年8月31日
    5
  • 回声消除技术

    回声消除技术引言在语音通信中 有一个很影响通话质量的因素就是回声 回声就是指说话者通过通信设备发送给其他人的语音又重新又回到自己的听筒里的现象 回声会对说话者产生严重的干扰 必须想办法消除 一般 回声分为两种 即 电路回声 和 声学回声 电路回声 可以通过硬件设备的合理设计而消除 在此不作讨论 最复杂和最难消除的应该是所谓的 声学回声 声学回声 是指远端用户的声音从听筒出来以后

    2026年3月17日
    2
  • Manus 新动向!估值5亿美元

    Manus 新动向!估值5亿美元

    2026年3月15日
    2

发表回复

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

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