private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e) { var headerClicked = e.OriginalSource as GridViewColumnHeader; if (headerClicked != null && headerClicked.Role != GridViewColumnHeaderRole.Padding) { var sortableGridViewColumn = headerClicked.Column as SortableGridViewColumn; if (sortableGridViewColumn != null && !string.IsNullOrEmpty(sortableGridViewColumn.SortPropertyName)) { ListSortDirection direction; if (lastSortedColumn == null || String.IsNullOrEmpty(lastSortedColumn.SortPropertyName) || !String.Equals(sortableGridViewColumn.SortPropertyName, lastSortedColumn.SortPropertyName, StringComparison.InvariantCultureIgnoreCase)) { direction = ListSortDirection.Ascending; } else { if (lastDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } else { direction = ListSortDirection.Ascending; } } string sortPropertyName = sortableGridViewColumn.SortPropertyName; Sort(sortPropertyName, direction); lastSortedColumn = sortableGridViewColumn; lastSortedColumnHeader = headerClicked; } } }
protected override void OnInitialized(EventArgs e) { this.AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(GridViewColumnHeaderClickedHandler)); var gridView = this.View as GridView; if (gridView != null) { SortableGridViewColumn sortableGridViewColumn = null; foreach (var gridViewColumn in gridView.Columns) { sortableGridViewColumn = gridViewColumn as SortableGridViewColumn; if (sortableGridViewColumn != null) { if (sortableGridViewColumn.IsDefaultSortColumn) { break; } sortableGridViewColumn = null; } } if (sortableGridViewColumn != null) { lastSortedColumn = sortableGridViewColumn; Sort(sortableGridViewColumn.SortPropertyName, ListSortDirection.Ascending); this.SelectedIndex = 0; } } base.OnInitialized(e); }
/// <summary> /// Handles the selection change event from the filter popup /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SelectionChangedHandler(object sender, SelectionChangedEventArgs e) { // obtain the term to filter for ListView filterListView = (ListView)sender; FilterItem filterItem = (FilterItem)filterListView.SelectedItem; // navigate up to the header to obtain the filter property name GridViewColumnHeader header = (GridViewColumnHeader)Helpers.FindElementOfTypeUp(filterListView, typeof(GridViewColumnHeader)); SortableGridViewColumn column = (SortableGridViewColumn)header.Column; String currentFilterProperty = column.SortPropertyName; if (filterItem == null) { return; } // determine whether to clear the filter for this column if (filterItem.ItemView.Equals("[clear]")) { if (currentFilters.ContainsKey(currentFilterProperty)) { FilterStruct filter = (FilterStruct)currentFilters[currentFilterProperty]; //filter.button.ContentTemplate = (DataTemplate)dictionary["filterButtonInactiveTemplate"]; //if (FilterButtonInactiveStyle != null) //{ // filter.button.Style = FilterButtonInactiveStyle; //} currentFilters.Remove(currentFilterProperty); } ApplyCurrentFilters(); } else { // find the button and apply the active style Button button = (Button)Helpers.FindVisualElement(header, "filterButton"); //button.ContentTemplate = (DataTemplate)dictionary["filterButtonActiveTemplate"]; //if (FilterButtonActiveStyle != null) //{ // button.Style = FilterButtonActiveStyle; //} AddFilter(currentFilterProperty, filterItem, button); ApplyCurrentFilters(); } // navigate up to the popup and close it Popup popup = (Popup)Helpers.FindElementOfTypeUp(filterListView, typeof(Popup)); popup.IsOpen = false; }
private void ShowFilterCommand(object sender, ExecutedRoutedEventArgs e) { Button button = e.OriginalSource as Button; if (button != null) { // navigate up to the header GridViewColumnHeader header = (GridViewColumnHeader)Helpers.FindElementOfTypeUp(button, typeof(GridViewColumnHeader)); if (header == null) { return; } // then down to the popup Popup popup = (Popup)Helpers.FindElementOfType(header, typeof(Popup)); if (popup != null) { // find the property name that we are filtering SortableGridViewColumn column = (SortableGridViewColumn)header.Column; String propertyName = column.SortPropertyName; // clear the previous filter if (filterList == null) { filterList = new ArrayList(); } filterList.Clear(); // if this property is currently being filtered, provide an option to clear the filter. if (IsPropertyFiltered(propertyName)) { filterList.Add(new FilterItem("[clear]")); } else { bool containsNull = false; //PropertyDescriptor filterPropDesc = TypeDescriptor.GetProperties(typeof(Log))[propertyName]; PropertyDescriptor filterPropDesc = TypeDescriptor.GetProperties(FilterType.GetType())[propertyName]; // iterate over all the objects in the list foreach (Object item in Items) { object value = filterPropDesc.GetValue(item); if (value != null) { FilterItem filterItem = new FilterItem(value as IComparable); if (!filterList.Contains(filterItem)) { filterList.Add(filterItem); } } else { containsNull = true; } } filterList.Sort(); if (containsNull) { filterList.Add(new FilterItem(null)); } } // open the popup to display this list popup.DataContext = filterList; CollectionViewSource.GetDefaultView(filterList).Refresh(); popup.IsOpen = true; // connect to the selection change event ListView listView = (ListView)popup.Child; listView.SelectionChanged += SelectionChangedHandler; } } }