views:

85

answers:

0

I found some strange problem in WPF, using the itemsSource of a treeview. I hope I can make this specific problem clear for you.

First; a story.
There is a treeview. It has a list with treeviewitems as itemsSource. This list is called _roots. There is another list, called _leafs. For as in a treeview, the _roots contain the _leafs in some hierarchical way. For example:

<TreeviewItem Header="Jungle">
    <TreeviewItem>
        <SpecialTreeviewItem Header="Monkey"/>
        <SpecialTreeviewItem Header="Apple"/>
    </TreeviewItem>
</TreeviewItem>

Now I am trying to switch between these two lists as itemsSource. It seemed to work fine, but it doesn't:

When the Jungle-item is un-expanded, and I change the itemsSource to _leafs, and change it back again to _roots, everything works fine and all items can be expanded and showed.

But when the Jungle-item is expanded (and the special items are already visible) and I change it to the _leafs itemsSource, and then change the itemsSource back to _roots, all special items have disappeared!!

Also, when I do the same as case 2, but first un-expand the Jungle-item again, the special items also disappear.

I did a lot of debugging, before posting this question here and come to the following conclusion:

  • Printing on the event: visibility changed, the visibility is set to false for all items that were already visible (that is, when _roots become visible, the special items become invisible (because they were already visible))
  • So, IsVisible is false for the items, but Visibility = Visible. Which is a bit strange.
  • The problem seems to depend on the use of the _roots list, which in a certain way contain the _leafs. When I change the itemsSource to different lists with special items in it, everything works fine. The hierarchical structure of the _roots make this thing broken.

I hope that this is a complete overview of my problem. Help would be appreciated.