Just in case anyone would find this useful:
public void Prepare(Telerik.Windows.Controls.GridViewColumn columnToPrepare) { _column = columnToPrepare; CollectionChangedEventManager.AddHandler(_column.DataControl.FilterDescriptors, FilterDescriptors_CollectionChanged); IFilterDescriptor f = _column.DataControl.FilterDescriptors.OfType<FilterDescriptor>().FirstOrDefault(p => p.Member == "Readiness"); if (f == null) f = _column.DataControl.FilterDescriptors.OfType<CompositeFilterDescriptor>().FirstOrDefault(p => p.FilterDescriptors.OfType<FilterDescriptor>().Any(v => v.Member == "Readiness")); var l = new List<FilterDescriptor>(); if (f is CompositeFilterDescriptor) { l.AddRange((f as CompositeFilterDescriptor).FilterDescriptors.Cast<FilterDescriptor>()); } else if (f is FilterDescriptor) l.Add((f as FilterDescriptor)); IsActive = f != null; foreach (var cb in this.FindVisualChild<Grid>().FindVisualChildren<CheckBox>()) { if (f == null) cb.IsChecked = false; else { cb.IsChecked = (cb == production && l.Any(fd => (ReadinessState)fd.Value == ReadinessState.PRODUCTION)) || (cb == development && l.Any(fd => (ReadinessState)fd.Value == ReadinessState.DEVELOPMENT)); } } }
private void FilterDescriptors_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { var coll = sender as ObservableCollection<IFilterDescriptor>; IFilterDescriptor f = coll.OfType<FilterDescriptor>().FirstOrDefault(p => p.Member == "Readiness"); if (f == null) f = coll.OfType<CompositeFilterDescriptor>().FirstOrDefault(p => p.FilterDescriptors.OfType<FilterDescriptor>().Any(v => v.Member == "Readiness")); CollectionChangedEventManager.AddHandler(coll, FilterDescriptors_CollectionChanged); var l = new List<FilterDescriptor>(); if (f is CompositeFilterDescriptor) { l.AddRange((f as CompositeFilterDescriptor).FilterDescriptors.Cast<FilterDescriptor>()); } else if (f is FilterDescriptor) l.Add((f as FilterDescriptor)); IsActive = f != null; }