/// <summary>
        /// ResetFilterValues is called when the column is bound ColumnFilterHeader
        /// </summary>
        /// <param name="filterColumnInfo">Information about the column binding object</param>
        internal void ResetFilterValues(FilterColumnInfo filterColumnInfo)
        {
            this.Visibility = System.Windows.Visibility.Collapsed;
            if (Column != null)
            {
                foreach (var i in DistinctPropertyValues.Where(i => i.IsChecked))
                    i.IsChecked = false;
                DistinctPropertyValues.Clear();
                FilterText = string.Empty;
                _boundColumnPropertyAccessor = null;
                FilterColumnInfo = filterColumnInfo;

                if (FilterColumnInfo.PropertyPath.Length > 0)
                {
                    if (FilterColumnInfo.PropertyPath.Contains('.'))
                        throw new ArgumentException(string.Format("This version of the grid does not support a nested property path such as '{0}'.  Please make a first-level property for filtering and bind to that.", FilterColumnInfo.PropertyPath));

                    this.Visibility = System.Windows.Visibility.Visible;
                    ParameterExpression arg = System.Linq.Expressions.Expression.Parameter(typeof(object), "x");
                    System.Linq.Expressions.Expression expr = System.Linq.Expressions.Expression.Convert(arg, Grid.FilterType);
                    expr = System.Linq.Expressions.Expression.Property(expr, Grid.FilterType, FilterColumnInfo.PropertyPath);
                    System.Linq.Expressions.Expression conversion = System.Linq.Expressions.Expression.Convert(expr, typeof(object));
                    _boundColumnPropertyAccessor = System.Linq.Expressions.Expression.Lambda<Func<object, object>>(conversion, arg).Compile();
                }
                else
                {
                    this.Visibility = System.Windows.Visibility.Collapsed;
                }
                ConfigureFilterOptions();
            }
        }
Example #2
0
        //Simple helper method which creates the FilterColumnInfo object for a column.  If a binding
        //is defined for the column we use that.  If that fails we fallback to using the SortMemberPath
        private FilterColumnInfo CreateFilterColumnInfo(DataGridColumn column)
        {
            FilterColumnInfo col = new FilterColumnInfo();
            DataGridBoundColumn boundColumn = column as DataGridBoundColumn;
            if (column != null)
            {
                if (boundColumn != null)
                {
                    col.PropertyPath = boundColumn.Binding.Path.Path;
                    col.PropertyType = FilterType.GetProperty(boundColumn.Binding.Path.Path).PropertyType;
                    col.Converter = boundColumn.Binding.Converter;
                    col.ConverterCultureInfo = boundColumn.Binding.ConverterCulture;
                    col.ConverterParameter = boundColumn.Binding.ConverterParameter;

                }
                else if (column.SortMemberPath.Length > 0)
                {
                    col.PropertyPath = column.SortMemberPath;
                    col.PropertyType = FilterType.GetProperty(column.SortMemberPath).PropertyType;
                }
            }
            return col;
        }
 /// <summary>
 /// If a filterColumnInfo is set, the control is visible.  As each ColumnOptionControl is loaded in the grid, the relating column
 /// is used to build FilterColumnInfo for the control.
 /// </summary>
 /// <param name="filterColumnInfo">Binding information about the column</param>
 internal void ResetOptionValues(FilterColumnInfo filterColumnInfo)
 {
     FilterColumnInfo = filterColumnInfo;
     if (!CanGroup && !CanPin)
         this.Visibility = System.Windows.Visibility.Collapsed;
     else
     {
         if (!string.IsNullOrWhiteSpace(filterColumnInfo.PropertyPath))
             this.Visibility = System.Windows.Visibility.Visible;
         else
             this.Visibility = System.Windows.Visibility.Collapsed;
     }
 }