コード例 #1
0
 /// <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;
         }
     }
 }
コード例 #2
0
ファイル: JibGrid.xaml.cs プロジェクト: vldch/JibGridWpf
 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;
         }
     }
 }