New to Telerik UI for WPF? Download free 30-day trial

Create a Custom Field Filter Editor

In case you do not like the default field filter editors that show up in the filtering UI you can easily replace them with your own. To do that you need to inherit from GridViewDataColumn and override the CreateFieldFilterEditor method. You then have to return your editor from this method. You have to data-bind your editor’s significant property to the property called Value which resides on its DataContext. You will also need to define an IValueConverter on this Binding that will be able to convert the FilterDescriptor.UnsetValue to the editor’s “empty” value. When the special singleton value FilterDescriptor.UnsetValue is assigned to a filter descriptor it turns it off. So your custom field filter editor will be able to “clear” or “turn off” the underlying FilterDescriptor.

Example 1 shows how to create a RadDateTimePicker and use it as a custom field filter editor. Of course, in real life you will not need to do this since DateTime columns provide RadDateTimePickers automatically. This is juts an example illustrating how to wire up your custom field filter editor.

Example 1: Overriding the CreateFieldFilterEditor method

public class MyDateTimeColumn : Telerik.Windows.Controls.GridViewDataColumn 
{ 
    public override FrameworkElement CreateFieldFilterEditor() 
    { 
        Telerik.Windows.Controls.RadDateTimePicker dateTimePicker = new Telerik.Windows.Controls.RadDateTimePicker(); 
 
        // This binding will transfer the significant property of your editor to the filtering view model. 
        Binding selectedValueBinding = new Binding("Value"); 
        selectedValueBinding.Mode = BindingMode.TwoWay; 
        selectedValueBinding.FallbackValue = null; 
        selectedValueBinding.Converter = new DateTimeFilterEditorConverter(); 
 
        dateTimePicker.SetBinding(Telerik.Windows.Controls.RadDateTimePicker.SelectedValueProperty, selectedValueBinding); 
 
        return dateTimePicker; 
    } 
 
    private class DateTimeFilterEditorConverter : IValueConverter 
    { 
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
            if (Object.Equals(value, Telerik.Windows.Data.FilterDescriptor.UnsetValue)) 
            { 
                // When the filter is turned off this is what your editor will get. 
                return null; 
            } 
 
            return value; 
        } 
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
            if (value == null) 
            { 
                // When your editor want to turn off the filter this is what it should return. 
                return Telerik.Windows.Data.FilterDescriptor.UnsetValue; 
            } 
 
            return value; 
        } 
    } 
} 
Public Class MyDateTimeColumn 
    Inherits Telerik.Windows.Controls.GridViewDataColumn 
    Public Overrides Function CreateFieldFilterEditor() As FrameworkElement 
        Dim dateTimePicker As New Telerik.Windows.Controls.RadDateTimePicker() 
 
        ' This binding will transfer the significant property of your editor to the filtering view model. 
        Dim selectedValueBinding As New Binding("Value") 
        selectedValueBinding.Mode = BindingMode.TwoWay 
        selectedValueBinding.FallbackValue = Nothing 
        selectedValueBinding.Converter = New DateTimeFilterEditorConverter() 
 
        dateTimePicker.SetBinding(Telerik.Windows.Controls.RadDateTimePicker.SelectedValueProperty, selectedValueBinding) 
 
        Return dateTimePicker 
    End Function 
 
    Private Class DateTimeFilterEditorConverter 
        Implements IValueConverter 
        Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert 
            If [Object].Equals(value, Telerik.Windows.Data.FilterDescriptor.UnsetValue) Then 
                ' When the filter is turned off this is what your editor will get. 
                Return Nothing 
            End If 
 
            Return value 
        End Function 
 
        Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack 
            If value Is Nothing Then 
                ' When your editor want to turn off the filter this is what it should return. 
                Return Telerik.Windows.Data.FilterDescriptor.UnsetValue 
            End If 
 
            Return value 
        End Function 
    End Class 
End Class 

You can check out a fully runnable example in the Create a Custom TimeSpanPickerColumn KB article.

In this article