private static void Sort(string sortBy, ListSortDirection direction) { ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(lv.ItemsSource); if (view != null) { try { ListViewCustomComparer sorter = (ListViewCustomComparer)ListViewSorter.GetCustomSorter(lv); if (sorter != null) { // measuring timing of custom sort int tick1 = Environment.TickCount; sorter.AddSort(sortBy, direction); view.CustomSort = sorter; lv.Items.Refresh(); int tick2 = Environment.TickCount; double elapsed1 = (tick2 - tick1) / 1000.0; MessageBox.Show(elapsed1.ToString() + " seconds."); } else { //measuring timem of SortDescriptions sort int tick3 = Environment.TickCount; lv.Items.SortDescriptions.Clear(); SortDescription sd = new SortDescription(sortBy, direction); lv.Items.SortDescriptions.Add(sd); lv.Items.Refresh(); int tick4 = Environment.TickCount; double elapsed2 = (tick4 - tick3) / 1000.0; MessageBox.Show(elapsed2.ToString() + " seconds."); } } catch (Exception ex) { string msg = ex.Message; } } }
private static void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e) { GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader; ListSortDirection direction; if (headerClicked != null) { if (headerClicked != _lastHeaderClicked) { direction = ListSortDirection.Ascending; } else { if (_lastDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } else { direction = ListSortDirection.Ascending; } } string header = String.Empty; try { header = ((Binding)ListViewSorter.GetSortBindingMember(headerClicked.Column)).Path.Path; } catch (Exception ex) { string msg = ex.Message; } if (header == String.Empty) { return; } Sort(header, direction); string resourceTemplateName = String.Empty; DataTemplate tmpTemplate; //if (_lastHeaderClicked != null) //{ // resourceTemplateName = "HeaderTemplateSortNon"; // tmpTemplate = lv.TryFindResource(resourceTemplateName) as DataTemplate; // _lastHeaderClicked.Column.HeaderTemplate = tmpTemplate; //} switch (direction) { case ListSortDirection.Ascending: resourceTemplateName = "HeaderTemplateSortAsc"; break; case ListSortDirection.Descending: resourceTemplateName = "HeaderTemplateSortDesc"; break; } tmpTemplate = lv.TryFindResource(resourceTemplateName) as DataTemplate; if (tmpTemplate != null) { headerClicked.Column.HeaderTemplate = tmpTemplate; } _lastHeaderClicked = headerClicked; _lastDirection = direction; } }