wpf中ListView控制元件點選列頭排序功能實現(超簡潔實用)
阿新 • • 發佈:2018-12-21
.xaml檔案中的主要程式碼
<ListView Name="lvMeasureData" GridViewColumnHeader.Click="Sort_Click" SelectionChanged="lvMeasureData_SelectionChanged" > <ListView.View> <GridView > <GridViewColumn Header="測量日期" DisplayMemberBinding="{Binding MeasureDate,StringFormat='yyyy/MM/dd HH:mm'}" Width="180"></GridViewColumn> <GridViewColumn Header="測量名稱" DisplayMemberBinding="{Binding MeasureName}" Width="200"></GridViewColumn> <!--<GridViewColumn Header="組織結構" DisplayMemberBinding="{Binding PersonnelCompany}" Width="100"></GridViewColumn>--> <GridViewColumn Header="被測人" DisplayMemberBinding="{Binding PersonnelName}" Width="120"></GridViewColumn> <GridViewColumn Header="測量模式" DisplayMemberBinding="{Binding MeasureModString}" Width="0"> </GridViewColumn> <GridViewColumn Header="型別" DisplayMemberBinding="{Binding MeasureTypeString}" Width="80"></GridViewColumn> </GridView> </ListView.View> </ListView>
.xmal.cs檔案中的排序方法sort()
#region listview 控制元件點選列頭排序方法 // private ListSortDirection _sortDirection; private GridViewColumnHeader _sortColumn; private void Sort_Click(object sender, RoutedEventArgs e) { GridViewColumnHeader column = e.OriginalSource as GridViewColumnHeader; if (column == null||column.Column==null) { return; } if (_sortColumn == column) { // Toggle sorting direction _sortDirection = _sortDirection == ListSortDirection.Ascending ? ListSortDirection.Descending : ListSortDirection.Ascending; } else { // Remove arrow from previously sorted header if (_sortColumn != null&& _sortColumn.Column!=null) { _sortColumn.Column.HeaderTemplate = null; _sortColumn.Column.Width = _sortColumn.ActualWidth - 20; } _sortColumn = column; _sortDirection = ListSortDirection.Ascending; column.Column.Width = column.ActualWidth + 20; } if (_sortDirection == ListSortDirection.Ascending) { column.Column.HeaderTemplate = Resources["ArrowUp"] as DataTemplate; } else { column.Column.HeaderTemplate = Resources["ArrowDown"] as DataTemplate; } string header = string.Empty; // if binding is used and property name doesn't match header content Binding b = _sortColumn.Column.DisplayMemberBinding as Binding; if (b != null) { header = b.Path.Path; } ICollectionView resultDataView = CollectionViewSource.GetDefaultView( (sender as ListView).ItemsSource); resultDataView.SortDescriptions.Clear(); resultDataView.SortDescriptions.Add( new SortDescription(header, _sortDirection)); } #endregion
執行程式,點選列頭髮現已實現排序功能,O(∩_∩)O哈哈~歡迎提問和指正