WPF 通过行为在xaml上控制itemscontrol(listbox,listview等)的排序分组
2017-04-20 15:38
218 查看
1.在项目中新增itemscontrol排序的类(可同时对多个条件进行分组排序)
备注:类引用的命名空间
using System.Windows.Controls;
using System.Windows.Interactivity;
using System.ComponentModel;
using System.Windows.Data;
2.在xaml进行调用,使用listview作为例子
3.排序效果(根据年龄进行降序排列)
备注:类引用的命名空间
using System.Windows.Controls;
using System.Windows.Interactivity;
using System.ComponentModel;
using System.Windows.Data;
/// <summary> /// 实现ItemsControl(如ListBox)的排序与分组 /// </summary> public class SortAndGroupBehavior : Behavior<ItemsControl> { /// <summary> /// 排序的属性 /// </summary> public string SortProperty { get; set; } /// <summary> /// 分组的属性 /// </summary> public string GroupProperty { get; set; } protected override void OnAttached() { base.OnAttached(); if (!string.IsNullOrEmpty(this.SortProperty)) { var list = this.SortProperty.Split(','); for (int ii = 0; ii < list.Length; ii++) { var str = list[ii]; if (string.IsNullOrEmpty(str)) { continue; } bool asc = true; if (str.EndsWith(" asc", StringComparison.OrdinalIgnoreCase)) { str = str.Substring(0, str.Length - 4); } else if (str.EndsWith(" desc", StringComparison.OrdinalIgnoreCase)) { str = str.Substring(0, str.Length - 5); asc = false; } this.AssociatedObject.Items.SortDescriptions.Add(new SortDescription(str, (asc ? ListSortDirection.Ascending : ListSortDirection.Descending))); } } if (!string.IsNullOrEmpty(this.GroupProperty)) { var list = this.GroupProperty.Split(','); for (int ii = 0; ii < list.Length; ii++) { var str = list[ii]; if (string.IsNullOrEmpty(str)) { continue; } this.AssociatedObject.Items.GroupDescriptions.Add(new PropertyGroupDescription(str)); } } } protected override void OnDetaching() { base.OnDetaching(); this.AssociatedObject.Items.SortDescriptions.Clear(); this.AssociatedObject.Items.GroupDescriptions.Clear(); } }
2.在xaml进行调用,使用listview作为例子
<ListView Margin="5" ItemsSource="{Binding PeopleList}"> <i:Interaction.Behaviors> <local:SortAndGroupBehavior SortProperty="Age desc"/> </i:Interaction.Behaviors> <ListView.View> <GridView> <GridViewColumn Header="国籍" Width="150" DisplayMemberBinding="{Binding Nation}" /> <GridViewColumn Header="城市" Width="150" DisplayMemberBinding="{Binding City}" /> <GridViewColumn Header="姓名" Width="150" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="年龄" Width="150" DisplayMemberBinding="{Binding Age}" /> </GridView> </ListView.View> </ListView>
3.排序效果(根据年龄进行降序排列)
相关文章推荐
- WPF-ListBox分组-排序
- 【焦点控制】通过按键控制ListView,TabHost中的焦点。
- WPF中如何在Xaml里通过Trigger修改该其他控件的属性
- wpf中ListView排序
- WPF 使用鼠标滚轮控制ListBox水平滚动条滚动
- WPF ListView 分组数据绑定 TreeView递归数据绑定
- ListView实现简单的过滤,排序等控制
- 列表ListBox、ListView、GridView 排序
- Win 8中WPF listview与listBox的Drag、Drop操作
- WPF里ItemsControl的分组实现
- listview,gridview里面通过一个item控制所有item的使用方法
- [WPF]ListView点击列头排序功能实现
- 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。
- WPF快速指导13:数据绑定之集合绑定之视图(排序、过滤、分组)
- WPF 视图分组排序
- [WPF]ListView点击列头排序功能实现
- wpf ListBox拖动排序实现
- ios开发中,联系人列表是怎样通过名字排序分组的(支持中文排序)
- AspxGridView行为:分页、分组、排序、过滤、锁定列
- WPF中Expander与ListBox(ItemsControl)嵌套中的问题