private void FilterItems() { IEnumerable source = ItemsSource; if (source == null) { FilteredItems.Clear(); return; } IEnumerator enumerator = source.GetEnumerator(); if (!enumerator.MoveNext()) { FilteredItems.Clear(); return; } FilterPredicate predicate = Predicate; FilteredCollection filtered = new FilteredCollection(); do { object item = enumerator.Current; if (predicate == null || predicate.Matches(item)) { filtered.Add(item); } }while (enumerator.MoveNext()); FilteredItems = filtered; }
private void RegisterPredicate(FilterPredicate predicate) { if (predicate != null) { predicate.ItemsSource = ItemsSource; predicate.FilterRequired += OnFilterRequired; } }
private void UnregisterPredicate(FilterPredicate predicate) { if (predicate != null) { predicate.FilterRequired -= OnFilterRequired; predicate.ItemsSource = null; } }
private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CollectionFilterBehavior behavior = (CollectionFilterBehavior)d; FilterPredicate predicate = behavior.Predicate; if (predicate != null) { predicate.ItemsSource = (IEnumerable)e.NewValue; } behavior.FilterItems(); }
private static void OnPredicateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CollectionFilterBehavior behavior = (CollectionFilterBehavior)d; FilterPredicate oldPredicate = (FilterPredicate)e.OldValue; behavior.UnregisterPredicate(oldPredicate); FilterPredicate newPredicate = (FilterPredicate)e.NewValue; behavior.RegisterPredicate(newPredicate); behavior.FilterItems(); }