/// <summary> /// Whenever any registered OptionControl raises the FilterChanged property changed event, we need to rebuild /// the new predicate used to filter the CollectionView. Since Multiple Columns can have predicate we need to /// iterate over all registered OptionControls and get each predicate. /// </summary> /// <param name="sender">The object which has risen the event</param> /// <param name="e">The property which has been changed</param> void filter_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "FilterChanged") { Predicate <object> predicate = null; foreach (var filter in Filters) { if (filter.HasPredicate) { if (predicate == null) { predicate = filter.GeneratePredicate(); } else { predicate = predicate.And(filter.GeneratePredicate()); } } } bool canContinue = true; var args = new CancelableFilterChangedEventArgs(predicate); if (BeforeFilterChanged != null && !IsResetting) { BeforeFilterChanged(this, args); canContinue = !args.Cancel; } if (canContinue) { 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) { CollectionView.Filter = predicate; } if (AfterFilterChanged != null) { AfterFilterChanged(this, new FilterChangedEventArgs(predicate)); } } else { IsResetting = true; var ctrl = sender as ColumnFilterControl; ctrl.ResetControl(); IsResetting = false; } } }
public void FirePredicationGeneration() { { Predicate <object> predicate = null; foreach (var filter in Filters) { if (filter.HasPredicate) { if (predicate == null) { predicate = filter.GeneratePredicate(); } else { predicate = predicate.And(filter.GeneratePredicate()); } } } bool canContinue = true; var args = new CancelableFilterChangedEventArgs(predicate); if (BeforeFilterChanged != null && !IsResetting) { BeforeFilterChanged(this, args); canContinue = !args.Cancel; } if (canContinue) { 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) { CollectionView.Filter = predicate; } if (AfterFilterChanged != null) { AfterFilterChanged(this, new FilterChangedEventArgs(predicate)); } } else { IsResetting = true; IsResetting = false; } } }