1. 程式人生 > >wpf中ListView控制元件點選列頭排序功能實現(超簡潔實用)

wpf中ListView控制元件點選列頭排序功能實現(超簡潔實用)

 .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哈哈~歡迎提問和指正