I was able to get this working using some of the answer from @EldHasp
The relevant XAML. The filter property was added.
<CollectionViewSource Source="{Binding Source={StaticResource vm}, Path=bomCompareItems}" x:Key="svm_grouped_by_seq" Filter="CollectionViewSource_Filter">
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="seq"></dat:PropertyGroupDescription>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<CollectionViewSource Source="{Binding Source={StaticResource vm}, Path=bomCompareItems}" x:Key="svm_grouped_by_type" Filter="CollectionViewSource_Filter">
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="type"></dat:PropertyGroupDescription>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
The codebehind
public partial class BomCompareItemView : Window, INotifyPropertyChanged
{
private readonly CollectionViewSource svm_grouped_by_seq;
private FilterEventHandler? OnTextFilter;
public BomCompareItemView()
{
InitializeComponent();
svm_grouped_by_seq = (CollectionViewSource)FindResource("svm_grouped_by_seq");
}
private void CollectionViewSource_Filter(object sender, FilterEventArgs e)
{
BomCompareItemModel bomCompareItem = e.Item as BomCompareItemModel;
if (bomCompareItem != null && this.tb_filtertext.Text != "")
{
bool test = Fuzz.PartialTokenSetRatio(this.tb_filtertext.Text.ToUpper(), bomCompareItem.id) > 90
|| Fuzz.PartialTokenSetRatio(this.tb_filtertext.Text.ToUpper(), bomCompareItem.description) > 90
|| Fuzz.PartialTokenSetRatio(this.tb_filtertext.Text.ToUpper(), bomCompareItem.mfg) > 90
|| Fuzz.PartialTokenSetRatio(this.tb_filtertext.Text.ToUpper(), bomCompareItem.seq) > 90;
e.Accepted = test;
}
}
private void OnFilterTextChanged(object sender, TextChangedEventArgs e)
{
string textFilter = tb_filtertext.Text.Trim().ToUpper();
if (OnTextFilter is not null)
svm_grouped_by_type.Filter -= OnTextFilter;
svm_grouped_by_seq.Filter -= OnTextFilter;
if (string.IsNullOrEmpty(textFilter))
{
OnTextFilter = null;
}
else
{
svm_grouped_by_type.Filter += OnTextFilter;
svm_grouped_by_seq.Filter += OnTextFilter;
}
}