Skip to content

Commit 9c08d15

Browse files
committed
Fix #65: Calling DataGrid.GetFilter() from code turns filter controls visible, even though IsAutoFilterEnabled is false.
1 parent 7372826 commit 9c08d15

3 files changed

Lines changed: 26 additions & 8 deletions

File tree

src/DataGridExtensions/DataGridFilterColumnControl.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
using DataGridExtensions.Framework;
1616

1717
using Throttle;
18+
using TomsToolbox.Wpf.Converters;
19+
using BooleanToVisibilityConverter = TomsToolbox.Wpf.Converters.BooleanToVisibilityConverter;
1820

1921
/// <summary>
2022
/// This class is the control hosting all information needed for filtering of one column.
@@ -24,7 +26,6 @@
2426
/// <seealso cref="INotifyPropertyChanged" />
2527
public class DataGridFilterColumnControl : Control, INotifyPropertyChanged
2628
{
27-
private static readonly BooleanToVisibilityConverter _booleanToVisibilityConverter = new BooleanToVisibilityConverter();
2829
private static readonly ControlTemplate _emptyControlTemplate = new ControlTemplate();
2930

3031
private bool _getCellContentMustUseBinding;
@@ -74,7 +75,23 @@ private void Self_Loaded(object sender, RoutedEventArgs e)
7475
// Bind our IsFilterVisible and Template properties to the corresponding properties attached to the
7576
// DataGridColumnHeader.Column property. Use binding instead of simple assignment since columnHeader.Column is still null at this point.
7677
var isFilterVisiblePropertyPath = new PropertyPath("(0)", DataGridFilterColumn.IsFilterVisibleProperty);
77-
BindingOperations.SetBinding(this, VisibilityProperty, new Binding() { Path = isFilterVisiblePropertyPath, Source = column, Mode = BindingMode.OneWay, Converter = _booleanToVisibilityConverter });
78+
var isAutoFilterEnabledPropertyPath = new PropertyPath("(0)", DataGridFilter.IsAutoFilterEnabledProperty);
79+
80+
BindingOperations.SetBinding(this, VisibilityProperty, new MultiBinding()
81+
{
82+
Converter = new CompositeMultiValueConverter()
83+
{
84+
MultiValueConverter = LogicalMultiValueConverter.And,
85+
Converters = {
86+
TomsToolbox.Wpf.Converters.BooleanToVisibilityConverter.Default
87+
}
88+
},
89+
Bindings =
90+
{
91+
new Binding() { Path = isFilterVisiblePropertyPath, Source = column, Mode = BindingMode.OneWay },
92+
new Binding() { Path = isAutoFilterEnabledPropertyPath, Source = DataGrid, Mode = BindingMode.OneWay }
93+
}
94+
}); ;
7895

7996
var templatePropertyPath = new PropertyPath("(0)", DataGridFilterColumn.TemplateProperty);
8097
BindingOperations.SetBinding(this, TemplateProperty, new Binding() { Path = templatePropertyPath, Source = column, Mode = BindingMode.OneWay });

src/DataGridExtensions/DataGridFilterHost.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,14 @@ internal void Enable(bool value)
100100
{
101101
_isFilteringEnabled = value;
102102

103-
var visibility = value ? Visibility.Visible : Visibility.Hidden;
104-
105-
foreach (var control in FilterColumnControls)
103+
if (!value)
106104
{
107-
control.Visibility = visibility;
105+
Clear();
106+
}
107+
else
108+
{
109+
EvaluateFilter();
108110
}
109-
110-
EvaluateFilter();
111111
}
112112

113113
/// <summary>

src/DataGridExtensionsSample/Views/BasicView.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public BasicView()
2424
// Sample to manipulate the filter values by code.
2525
DataGrid.Columns[0].SetFilter("True");
2626
DataGrid.Columns[2].SetFilter("3");
27+
DataGrid.Columns[3].SetIsFilterVisible(false);
2728
}));
2829

2930
// Sample usage of the filtering event

0 commit comments

Comments
 (0)