private void RebuildFilter() { this.FilterDescriptors.BeginUpdate(); for (int index = this.FilterDescriptors.Count - 1; index >= 0; --index) { FilterDescriptor filterDescriptor = this.FilterDescriptors[index]; filterDescriptor.PropertyChanged -= new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged); this.FilterDescriptors.Remove(filterDescriptor); } this.FilterDescriptors.Clear(); FilterDescriptorCollection filterDescriptors = this.FilterDescriptors; if (this.predicates.Count > 0) { filterDescriptors.LogicalOperator = GridViewHelper.GetLogicalOperator(this.predicates[0].BinaryOperator); } List <FilterPredicate> validPredicates = this.GetValidPredicates(); for (int index = 0; index < validPredicates.Count; ++index) { object[] predicateValues = this.GetPredicateValues(validPredicates[index]); FilterOperator filterOperator = GridViewHelper.GetFilterOperator(validPredicates[index].Function); if (filterOperator != FilterOperator.None) { FilterDescriptor filterDescriptor = new FilterDescriptor(this.PropertyName, filterOperator, predicateValues[0]); filterDescriptor.PropertyChanged += new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged); filterDescriptors.Add(filterDescriptor); } else { CompositeFilterDescriptor.DescriptorType type = CompositeFilterDescriptor.DescriptorType.Between; if (this.predicates[index].Function == GridKnownFunction.NotBetween) { type = CompositeFilterDescriptor.DescriptorType.NotBetween; } CompositeFilterDescriptor descriptor = CompositeFilterDescriptor.CreateDescriptor(type, this.PropertyName, predicateValues[0], predicateValues[1]); descriptor.PropertyChanged += new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged); filterDescriptors.Add((FilterDescriptor)descriptor); } if (this.IsComposite(validPredicates.Count - index, validPredicates)) { CompositeFilterDescriptor filterDescriptor = new CompositeFilterDescriptor(); filterDescriptor.PropertyChanged += new PropertyChangedEventHandler(this.FilterExpression_PropertyChanged); filterDescriptor.LogicalOperator = GridViewHelper.GetLogicalOperator(validPredicates[index + 2].BinaryOperator); filterDescriptors.Add((FilterDescriptor)filterDescriptor); filterDescriptors = filterDescriptor.FilterDescriptors; } } this.FilterDescriptors.EndUpdate(); }