列单击时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(); 

}

基本上就是这样。 我没有在列标题上添加小方向字形来显示方向。 如果您想了解如何操作,可以参考完整的教程(参见上面的链接)。