/// <summary> /// Filter attached property to attach the DataGridFilterHost instance to the owning DataGrid. /// This property is only used by code and is not accessible from XAML. /// </summary> /// <param name="dataGrid">The data grid.</param> /// <returns>The <see cref="DataGridFilterHost"/></returns> public static DataGridFilterHost GetFilter(this DataGrid dataGrid) { if (dataGrid.GetValue(FilterProperty) is not DataGridFilterHost value) { value = new DataGridFilterHost(dataGrid); dataGrid.SetValue(FilterProperty, value); } return(value); }
public static DataGridFilterHost GetFilter([NotNull] this DataGrid dataGrid) { var value = (DataGridFilterHost)dataGrid.GetValue(FilterProperty); if (value == null) { value = new DataGridFilterHost(dataGrid); dataGrid.SetValue(FilterProperty, value); } return(value); }
public static DataGridFilterHost GetFilter([NotNull] this DataGrid dataGrid) { Contract.Requires(dataGrid != null); Contract.Ensures(Contract.Result <DataGridFilterHost>() != null); var value = (DataGridFilterHost)dataGrid.GetValue(FilterProperty); if (value == null) { value = new DataGridFilterHost(dataGrid); dataGrid.SetValue(FilterProperty, value); } return(value); }
private void self_Loaded(object sender, RoutedEventArgs e) { if (FilterHost == null) { // Find the ancestor column header and data grid controls. ColumnHeader = this.FindAncestorOrSelf<DataGridColumnHeader>(); if (ColumnHeader == null) throw new InvalidOperationException("DataGridFilterColumnControl must be a child element of a DataGridColumnHeader."); DataGrid = ColumnHeader.FindAncestorOrSelf<DataGrid>(); if (DataGrid == null) throw new InvalidOperationException("DataGridColumnHeader must be a child element of a DataGrid"); // Find our host and attach ourself. FilterHost = DataGrid.GetFilter(); } FilterHost.AddColumn(this); DataGrid.SourceUpdated += DataGrid_SourceOrTargetUpdated; DataGrid.TargetUpdated += DataGrid_SourceOrTargetUpdated; DataGrid.RowEditEnding += DataGrid_RowEditEnding; // Must set a non-null empty template here, else we won't get the coerce value callback when the columns attached property is null! Template = _emptyControlTemplate; // Bind our IsFilterVisible and Template properties to the corresponding properties attached to the // DataGridColumnHeader.Column property. Use binding instead of simple assignment since columnHeader.Column is still null at this point. var isFilterVisiblePropertyPath = new PropertyPath("Column.(0)", DataGridFilterColumn.IsFilterVisibleProperty); BindingOperations.SetBinding(this, VisibilityProperty, new Binding() { Path = isFilterVisiblePropertyPath, Source = ColumnHeader, Mode = BindingMode.OneWay, Converter = _booleanToVisibilityConverter }); var templatePropertyPath = new PropertyPath("Column.(0)", DataGridFilterColumn.TemplateProperty); BindingOperations.SetBinding(this, TemplateProperty, new Binding() { Path = templatePropertyPath, Source = ColumnHeader, Mode = BindingMode.OneWay }); var filterPropertyPath = new PropertyPath("Column.(0)", DataGridFilterColumn.FilterProperty); BindingOperations.SetBinding(this, FilterProperty, new Binding() { Path = filterPropertyPath, Source = ColumnHeader, Mode = BindingMode.TwoWay }); }