/// <summary>
 /// Reset the avl filter operations given the property type.  This is called each time the control is configured by calling ResetFilterValues
 /// </summary>
 private void ConfigureFilterOptions()
 {
     FilterOperations.Clear();
     if (FilterColumnInfo.PropertyType != null)
     {
         if (TypeHelper.IsStringType(FilterColumnInfo.PropertyType))
         {
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.Contains, "Содержит", "/Jib.Controls;component/Images/Contains.png"));
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.StartsWith, "Начинается с", "/Jib.Controls;component/Images/StartsWith.png"));
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.EndsWith, "Заканчивается на", "/Jib.Controls;component/Images/EndsWith.png"));
         }
         FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.Equals, "Равно", "/Jib.Controls;component/Images/Equal.png"));
         if (TypeHelper.IsNumbericType(FilterColumnInfo.PropertyType))
         {
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.GreaterThan, "Больше чем", "/Jib.Controls;component/Images/GreaterThan.png"));
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.GreaterThanEqual, "Больше или равно", "/Jib.Controls;component/Images/GreaterThanEqual.png"));
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.LessThan, "Меньше чем", "/Jib.Controls;component/Images/LessThan.png"));
             FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.LessThanEqual, "Меньше или равно", "/Jib.Controls;component/Images/LessThanEqual.png"));
         }
         SelectedFilterOperation = FilterOperations[0];
     }
 }
        /// <summary>
        /// This method creates the predicate for the given operation and text
        /// </summary>
        /// <param name="propertyName">The property which the header column is bound to</param>
        /// <param name="filterValue">The value for the predicate.</param>
        /// <param name="objType">The object type of the grid itemsource</param>
        /// <param name="propType">They type for the property</param>
        /// <param name="filterItem">The type of filter (i.e. Contains, Equals...)</param>
        /// <returns>The predicate</returns>
        protected Predicate<object> GenerateFilterPredicate(string propertyName, string filterValue, Type objType, Type propType, FilterOperationItem filterItem)
        {
            ParameterExpression objParam = System.Linq.Expressions.Expression.Parameter(typeof(object), "x");
            UnaryExpression param = System.Linq.Expressions.Expression.TypeAs(objParam, objType);
            var prop = System.Linq.Expressions.Expression.Property(param, propertyName);
            var val = System.Linq.Expressions.Expression.Constant(filterValue);

            switch (filterItem.FilterOption)
            {
                case Enums.FilterOperation.Contains:
                    return ExpressionHelper.GenerateGeneric(prop, val, propType, objParam, "Contains");
                case Enums.FilterOperation.EndsWith:
                    return ExpressionHelper.GenerateGeneric(prop, val, propType, objParam, "EndsWith");
                case Enums.FilterOperation.StartsWith:
                    return ExpressionHelper.GenerateGeneric(prop, val, propType, objParam, "StartsWith");
                case Enums.FilterOperation.Equals:
                    return ExpressionHelper.GenerateEquals(prop, filterValue, propType, objParam);
                case Enums.FilterOperation.GreaterThanEqual:
                    return ExpressionHelper.GenerateGreaterThanEqual(prop, filterValue, propType, objParam);
                case Enums.FilterOperation.LessThanEqual:
                    return ExpressionHelper.GenerateLessThanEqual(prop, filterValue, propType, objParam);
                case Enums.FilterOperation.GreaterThan:
                    return ExpressionHelper.GenerateGreaterThan(prop, filterValue, propType, objParam);
                case Enums.FilterOperation.LessThan:
                    return ExpressionHelper.GenerateLessThan(prop, filterValue, propType, objParam);
                default:
                    throw new ArgumentException("Could not decode Search Mode.  Did you add a new value to the enum, or send in Unknown?");
            }
        }