private void InitColumnHeader(object args) { RoutedEventArgs routedEventArgs = args as RoutedEventArgs; DataGridColumnHeader columnHeader = (routedEventArgs.OriginalSource as Grid).GetParent <DataGridColumnHeader>(); if (columnHeader == null || columnHeader.Column == null) { return; } foreach (var column in this.Columns) { if (columnHeader.Column == column) { bool isFilter = (bool)column.GetValue(ColumnConfiguration.CanClassFilterProperty); DataGridColumnHeaderFilter headerFilter = new DataGridColumnHeaderFilter(); headerFilter.DataGridExtend = this; headerFilter.FilterType = FilterType; headerFilter.FilterFinsh += HeaderFilter_FilterFinsh; headerFilter.IsVisiable = isFilter; columnHeader.Tag = headerFilter; DataGridColumnHeaders.Add(columnHeader); } } }
private void HeaderFilter_FilterFinsh(object sender, RoutedEventArgs e) { Predicate <object> predicate = null; foreach (var item in DataGridColumnHeaders) { DataGridColumnHeaderFilter dataGridColumnHeaderFilter = item.Tag as DataGridColumnHeaderFilter; if (dataGridColumnHeaderFilter.Predicate == null) { continue; } if (predicate == null) { predicate = dataGridColumnHeaderFilter.Predicate; } else { predicate = predicate.Or(dataGridColumnHeaderFilter.Predicate); } } ListCollectionView view = CollectionViewSource.GetDefaultView(this.ItemsSource) as ListCollectionView; if (view != null && view.IsEditingItem) { view.CommitEdit(); } if (view != null && view.IsAddingNew) { view.CommitNew(); } if (CollectionView != null) { try { CollectionView.Filter = predicate; } catch { } } }