I have prepared a sample project that uses a completely different approach.
Basically, each time that something changes on the RadDataFilter.FilterDescriptors, it evaluates the new filtering expression and compares it with the last one that was cached. If they are different, this means that the filtering criteria in RadDataFilter has changed. The good thing here is that when you click the Property Name drop-down and then the FilterOperator drop-down, this will not cause redundant events because when a FilterDescriptor is Unset it does not take part in the building of the expression.
To summarize, the Debug.WriteLine in the sample project will be hit if and only if the actual filtering expression of RadDataFilter has changed. You can use the debugger and see what kind of LINQ expressions we generate if you are interested in this kind of stuff. Simply watch the ToString() methods calls of the two expressions being compared and see what they return.
I hope this helps.
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>