Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 201681
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T17:13:14+00:00 2026-05-11T17:13:14+00:00

The problem: We want to bind a HierarchicalDataTemplate’s ItemsSource property to a CollectionViewSource, to

  • 0

The problem: We want to bind a HierarchicalDataTemplate’s ItemsSource property to a CollectionViewSource, to perform grouping and filtering.

The background: The original issue we were working on had to do with filtering a TreeView. Specifically, we found that using a CollectionViewSource to filter worked but caused the TreeView nodes to collapse. It’s likely because the View’s Refresh function regenerates its list of objects which causes the TreeView to regenerate its nodes, causing the original nodes’ expansion states to be lost. We resolved this by writing a class that is similar to CollectionViewSource but preserves the View by editing the object list in place so that when it changes due to filtering, the associated TreeView nodes aren’t destroyed.

This has worked perfectly for us and we’d like to use it at deeper levels in our TreeView, bringing us back to our problem. Currently, we have a HierarchicalDataTemplate that looks like this:

<HierarchicalDataTemplate

    x:Key="tableTemplate"

    ItemsSource="{Binding Path=DataItems}"

    ItemTemplateSelector="{StaticResource tableGroupsTemplateSelector}"

    >

Instead, we want it to behave like this:

<HierarchicalDataTemplate

    x:Key="tableTemplate"

    ItemTemplateSelector="{StaticResource tableGroupsTemplateSelector}"

    >

    <HierarchicalDataTemplate.ItemsSource>

        <Binding>

            <Binding.Source>

                <CollectionViewSource

                    Source="{Binding Path=DataItems}"

                    />

            </Binding.Source>

        </Binding>

    </HierarchicalDataTemplate.ItemsSource>

Unfortunately, this approach doesn’t seem to work. From what we can tell, the binding within the CVS never fires; no binding errors are raised; we tried attaching a converter and setting a breakpoint but the breakpoint was never hit. We’ve also tried various other solutions, including: using RelativeSource, moving the CollectionViewSource into the template’s Resources, and incorporating TreeViewItem’s into the template. However, nothing has worked.

As an aside, I do realize that a ViewModel approach would enable filtering. However, I’m at a place in our development cycle where I can’t make that type of change so I’m looking for alternatives, like the CollectionViewSource approach.

Any help you can give would be appreciated.

Thanks,

-Craig

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-11T17:13:14+00:00Added an answer on May 11, 2026 at 5:13 pm

    In my applications I have found that the simplest way to achieve tree view filtering is by binding the visibility to a property on the listed objects.

    This approach may not work for you but if you would like to try it here is an example of what I have done.

    In the Tree View Resources you add a Style Trigger. you can bind the trigger to any property on the objects that your displaying, and you can add in a value converter if you want to add some logic to inspect the item and decide if it should be displayed or not.

    <TreeView.Resources>
       <Style TargetType="TreeViewItem">
             <Style.Triggers>
                   <DataTrigger Binding="{Binding Path=Display}" Value="False">
                        <Setter Property="Visibility"  Value="Collapsed"/>
                   </DataTrigger>
             </Style.Triggers>
       </Style>
    </TreeView.Resources>
    

    The Trigger will Collapse the treeView item if the “Display” property is false.

    To avoid adding a “Display” property to your objects, you can do the following:

     public class PositionVisibilityConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
    
                int positions = (int) value;
                if (positions > 0)
                    return true;
                return false;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new System.NotSupportedException();
            }
        }
    

    And in the TreeView Style binding add the value converter:

    <TreeView.Resources>
       <Style TargetType="TreeViewItem">
             <Style.Triggers>
                   <DataTrigger Value="False">
                        <Binding Path="Positions">
                            <Binding.Converter>
                                <local:PositionVisibilityConverter/>
                            </Binding.Converter>
                        </Binding>
                        <Setter Property="Visibility"  Value="Collapsed"/>
                   </DataTrigger>
             </Style.Triggers>
       </Style>
    </TreeView.Resources>
    

    You dont need to specify the path if you want to inspect the whole object.

    This method seemed to work best for me, give it a try.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have an objectdatasource which i want to bind to a repeater. the problem
I use ComboBox.ItemsSource=[some data collection] to bind data to the control. I want to
Theres is a little problem I want to solve with Haskell: let substitute a
I have a little Java problem I want to translate to Python. Therefor I
I have a simple, real life problem I want to solve using an OO
Django view points to a function, which can be a problem if you want
My problem is that I want a grid that is populated with a set
Problem 1: I have a simple winforms app and I want to DataBind my
I want to build my own custom log4j (network) adapter to solve my problem
The problem is simple: Using bash, I want to add a directory to my

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.