or
<telerik:RadGridView Grid.Row="1" ColumnWidth="*" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ShowGroupPanel="False" AutoGenerateColumns="False" CanUserInsertRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" ShowColumnHeaders="True" CanUserSortColumns="False" RowIndicatorVisibility="Collapsed"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding Title, Mode=OneWay}" IsReadOnly="True" Header="Chord" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding DisplayNotes, Mode=OneWay}" IsReadOnly="True" Header="Notes" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding NumNotes, Mode=OneWay}" IsReadOnly="True" Header="Notes"/> <telerik:GridViewDataColumn DataMemberBinding="{Binding PlayKey, Mode=OneWay}" IsReadOnly="True" Header="Play"/> </telerik:RadGridView.Columns></telerik:RadGridView>CustomItems = new ObservableCollection<CheckBoxCustomFilterType>{ new CheckBoxCustomFilterType { Checked = false, Text = "5016" }, new CheckBoxCustomFilterType { Checked = true, Text = "25835" }};<UserControl x:Class="Systematic.KVK.InseminationPlan.UIL.Details.Windows.SemenBucket.CustomFilters.CheckBoxFilterControl" xmlns:localization="clr-namespace:Systematic.KVK.InseminationPlan.Localization" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:customFilters="clr-namespace:Systematic.KVK.InseminationPlan.UIL.Details.Windows.SemenBucket.CustomFilters" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Systematic.KVK.WPFCommon;component/Style/ModernStyles.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </UserControl.Resources> <Border x:Name="LayoutRoot" BorderThickness="1" BorderBrush="{StaticResource DarkGreenHoverColor}" Padding="5" Background="{StaticResource White}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="120" /> <ColumnDefinition Width="120" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <CheckBox Margin="3, 0, 0, 8" Content="{x:StaticExtension localization:SemenBucketTexts.SelectAll}" Click="SelectAll" /> <telerik:RadGridView Name="CheckBoxGridView" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" AutoGenerateColumns="False" CanUserDeleteRows="False" CanUserSelect="False" ShowColumnHeaders="False" CanUserReorderColumns="False" BorderThickness="0" HorizontalAlignment="Left" ItemsSource="{Binding CustomItems}"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=IsSelected}" Header="" EditTriggers="CellClick" IsReadOnly="True"> <telerik:GridViewDataColumn.HeaderCellStyle> <Style TargetType="{x:Type telerik:GridViewHeaderCell}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <CheckBox Margin="3, 0, 0, 8" Command="{Binding Path=DataContext.SelectedAllCommand, ElementName=ListTabViewName}" IsChecked="{Binding Path=DataContext.ShouldAllBeChecked, ElementName=ListTabViewName}" HorizontalAlignment="Left" VerticalAlignment="Center" /> </ControlTemplate> </Setter.Value> </Setter> </Style> </telerik:GridViewDataColumn.HeaderCellStyle> <telerik:GridViewDataColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Path=Checked, Mode=TwoWay}" Content="{Binding Path=Text}" HorizontalAlignment="Left" VerticalAlignment="Center" /> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate> </telerik:GridViewDataColumn> </telerik:RadGridView.Columns> </telerik:RadGridView> <Button Grid.Column="0" Grid.Row="2" Name="FilterButton" Content="{x:StaticExtension localization:SemenBucketTexts.Filter}" Click="OnFilter" Margin="9" /> <Button Grid.Column="1" Grid.Row="2" Name="ClearButton" Content="{x:StaticExtension localization:SemenBucketTexts.Clear}" Click="OnClear" Margin="9" /> </Grid> </Border></UserControl>using System.Collections.Generic;using System.Collections.ObjectModel;using System.Windows;using System.Windows.Controls;using Telerik.Windows.Controls;using Telerik.Windows.Controls.GridView;using Telerik.Windows.Data;namespace Systematic.KVK.InseminationPlan.UIL.Details.Windows.SemenBucket.CustomFilters{ /// <summary> /// Interaction logic for CheckBoxFilterControl.xaml /// </summary> public partial class CheckBoxFilterControl : IFilteringControl { public ObservableCollection<CheckBoxCustomFilterType> CustomItems { get; set; } private GridViewBoundColumnBase column; private CompositeFilterDescriptor compositeFilter; public CheckBoxFilterControl() { InitializeComponent(); CustomItems = new ObservableCollection<CheckBoxCustomFilterType> { new CheckBoxCustomFilterType { Checked = false, Text = "5016" }, new CheckBoxCustomFilterType { Checked = true, Text = "25835" } }; DataContext = this; } private void OnFilter(object sender, RoutedEventArgs e) { column.DataControl.FilterDescriptors.Clear(); compositeFilter = new CompositeFilterDescriptor(); compositeFilter.LogicalOperator = FilterCompositionLogicalOperator.Or; string 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.Reset(); IsActive = false; } public void Prepare(Telerik.Windows.Controls.GridViewColumn column) { this.column = column as GridViewBoundColumnBase; if (this.column == null) { return; } } 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; } } }}