or
var filter = new FilterDescriptor(dataMember, FilterOperator.IsEqualTo, checkBoxCustomFilterType.Text);namespace Systematic.KVK.InseminationPlan.UIL.Details.Windows.TestBucket.DOM{ [TypeConverter(typeof(TestTypeConverter))] public class PTestType : IEquatable<PTestType> { public long Id { get; set; } public string ShortTestName { get; set; } public string TestName { get; set; } public bool Equals(PTestType other) { return Id == other.Id; } public override string ToString() { return ShortTestName; } public override int GetHashCode() { return (int)Id; } public override bool Equals(object obj) { var type = obj as PTestType; if (type != null) { return Id == type.Id; } return false; } bool IEquatable<PTestType>.Equals(PTestType other) { if (other == null) { return false; } return StringComparer.Ordinal.Equals(Id, other.Id); } }}namespace Systematic.KVK.InseminationPlan.UIL.Details.Windows.TestBucket.Tabs.TestBucketTab{ public class PTestTypeConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var TestType = (PTestType)value; return TestType.ShortTestName; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public class TestTypeConverter : TypeConverter { public TestTypeConverter() { } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return sourceType == typeof(string); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var stringValue = value as string; if (stringValue != null) { return new PTestType {Id = 1, TestName = "sdfsdf",ShortTestName = "shortsd"}; } return base.ConvertFrom(context, culture, value); } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) { return true; } return base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { return ((PTestType)value).ShortTestName; } return base.ConvertTo(context, culture, value, destinationType); } }}namespace Systematic.KVK.InseminationPlan.UIL.Details.Windows.TestBucket.CustomFilters{ public partial class TestTypeCheckBoxFilterControl : IFilteringControl { public ObservableCollection<CheckBoxCustomFilterType> CustomItems { get; set; } private GridViewBoundColumnBase column; private CompositeFilterDescriptor compositeFilter; public TestTypeCheckBoxFilterControl() { InitializeComponent(); CustomItems = new ObservableCollection<CheckBoxCustomFilterType>(); DataContext = this; } private void OnFilter(object sender, RoutedEventArgs e) { column.DataControl.FilterDescriptors.Clear(); compositeFilter = new CompositeFilterDescriptor {LogicalOperator = FilterCompositionLogicalOperator.Or}; var dataMember = column.DataMemberBinding.Path.Path; foreach (var checkBoxCustomFilterType in CustomItems) { if (checkBoxCustomFilterType.Checked) { var filter = new FilterDescriptor(dataMember, FilterOperator.IsEqualTo, checkBoxCustomFilterType.Text); compositeFilter.FilterDescriptors.Add(filter); } } if (!column.DataControl.FilterDescriptors.Contains(compositeFilter)) { column.DataControl.FilterDescriptors.Add(compositeFilter); } IsActive = true; } private void OnClear(object sender, RoutedEventArgs e) { column.DataControl.FilterDescriptors.Clear(); compositeFilter.FilterDescriptors.Clear(); CustomItems.ForEach(x => x.Checked = false); } public void Prepare(Telerik.Windows.Controls.GridViewColumn column) { CustomItems.Clear(); this.column = column as GridViewBoundColumnBase; var distinctValues = ((RadGridView)column.Parent).GetDistinctValues(column, false); foreach (PTestType distinctValue in distinctValues) { CustomItems.Add(new CheckBoxCustomFilterType {Checked = false, Text = distinctValue.ToString()}); } } public bool IsActive { get; set; } private void SelectAll(object sender, RoutedEventArgs e) { var checkbox = (sender as CheckBox); if (checkbox == null || checkbox.IsChecked == null) { return; } foreach (var checkBoxCustomFilterType in CustomItems) { checkBoxCustomFilterType.Checked = checkbox.IsChecked.Value; } } }}<telerik:GridViewDataColumn DataMemberBinding="{Binding Path=PTestType}" IsReadOnly="True" IsFilterable="True" Header="{x:Static localization:TestBucketTexts.TestType}"> <telerik:GridViewDataColumn.FilteringControl> <customFilters:TestTypeCheckBoxFilterControl /> </telerik:GridViewDataColumn.FilteringControl> <telerik:GridViewDataColumn.CellTemplate> <DataTemplate DataType="dom:PBucketModel"> <TextBlock Text="{Binding Path=PTestType}" /> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate></telerik:GridViewDataColumn>