The scenario we will try to create here would be to implement RadExpressionEditor as an advanced manual filter for RadGridView. For that purpose, we will firstly create a new class Employee with a couple of exposed properties and a method creating sample data:

Public Class MyViewModel
Private m_employees As ObservableCollection(Of Employee)
Public ReadOnly Property Employees() As ObservableCollection(Of Employee)
Get
If Me.m_employees Is Nothing Then
Me.m_employees = Employee.GetEmployees()
End If
Return Me.m_employees
End Get
End Property
End Class

Once we declared the business object and the corresponding ViewModel, we can define RadExpressionEditor and bind it appropriately.

Private genericFilterDescriptor As New FilterDescriptor(Of Employee)()
Private Sub ExpressionEditor_ExpressionChanged(sender As Object, e As Telerik.Windows.RadRoutedEventArgs)
If Me.ExpressionEditor.Expression IsNot Nothing AndAlso Me.ExpressionEditor.Expression.GetType = GetType(Expression(Of Func(Of Employee, Boolean))) Then
Me.genericFilterDescriptor.FilteringExpression = DirectCast(Me.ExpressionEditor.Expression, Expression(Of Func(Of Employee, Boolean)))
If Not Me.GridView.FilterDescriptors.Contains(Me.genericFilterDescriptor) Then
Me.GridView.FilterDescriptors.Add(Me.genericFilterDescriptor)
End If
ElseIf Me.ExpressionEditor.Expression Is Nothing Then
If Me.GridView.FilterDescriptors.Contains(Me.genericFilterDescriptor) Then
Me.GridView.FilterDescriptors.Remove(Me.genericFilterDescriptor)
End If
End If
End Sub

On running the application and testing the functionality of adding a filter descriptor for RadGridView, you should see a similar result:

Still, using the Calculation Panel and the items in each Category, you are empowered to create far more complex filtering expressions.

You can access ExpressionEditor.Expression.Type.

RadExpressionEditor provides support for dynamic objects with ICustomTypeProvider (.NET 4.5) or ICustomTypeDescriptor implementation. It will scan the object's properties and show them in the Fields list.

By default pasting in the editor is not supported. This is the behavior as the inner ExpressionTextBox is configured to not accept returns. You can resolve this with the following approach ensuring the pasting will be executed in code: