79616863

Date: 2025-05-11 19:57:58
Score: 1
Natty:
Report link

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;
           }
       }
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @EldHasp
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Vespian