列单击时WPF ListView排序
我有一个列表视图,项目在运行时以单个/多列的网格forms添加。 现在我需要让排序工作。 列表视图中包含项目并单击列后,应对该列进行排序。
以下是listview的代码
填充列表视图的C#代码:
case "Person": dt = GetDataTable(GET_Person) this.lstValue.View = gridview; gridview.Columns.Add(new GridViewColumn { Header = "Number", DisplayMemberBinding = new Binding("Number") }); gridview.Columns.Add(new GridViewColumn { Header = "Name", DisplayMemberBinding = new Binding("Name") }); foreach(DataRow dr in dt.Rows) { this.lstValue.Items.Add(new ReportItem { Number = dr["Number"].ToString(), Name = dr["Name"].ToString() }); } break;
他们应该能够对姓名或号码进行排序。
此链接是MSDN方式。 主要是处理gridview列标题上的单击。
并在代码中:
GridViewColumnHeader _lastHeaderClicked = null; ListSortDirection _lastDirection = ListSortDirection.Ascending; void GridViewColumnHeaderClickedHandler(object sender,RoutedEventArgs e) { GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader; ListSortDirection direction; if (headerClicked != null) { if (headerClicked.Role != GridViewColumnHeaderRole.Padding) { if (headerClicked != _lastHeaderClicked) { direction = ListSortDirection.Ascending; } else { if (_lastDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } else { direction = ListSortDirection.Ascending; } } string header = headerClicked.Column.Header as string; Sort(header, direction); _lastHeaderClicked = headerClicked; _lastDirection = direction; } } } private void Sort(string sortBy, ListSortDirection direction) { ICollectionView dataView = CollectionViewSource.GetDefaultView(lv.ItemsSource); dataView.SortDescriptions.Clear(); SortDescription sd = new SortDescription(sortBy, direction); dataView.SortDescriptions.Add(sd); dataView.Refresh();
}
基本上就是这样。 我没有在列标题上添加小方向字形来显示方向。 如果您想了解如何操作,可以参考完整的教程(参见上面的链接)。
- Process.Start()在模拟后抛出“拒绝访问”
- 用于validationSQL脚本的代码
- TextBoxFor()不生成validation标记
- 使用来自C#的重载VB.NET Not运算符
- 在Roslyn分析器中检查表达式类型的正确方法?
- C#和VB.NET中的转换之间的区别
- System.Threading.Timer vs System.Threading.Thread.Sleep resolution – .NET Timer不使用系统时钟分辨率
- ASP.net MVC – 每个视图或每个动作一个ViewModel?
- 当两个类具有相同名称但名称空间不同时,NHibernate DuplicateMappingException