If you move an item from one level to another into the tree, the indent of the corresponding row won't get updated. This is reproducible only if the new parent of the moved item is expanded, while the operation is executed. Usually, this can be reproduced by calling the ExpandHierarchyItem() for the new parent item method just after the moving of the original item. To resolve this you can delay the expanding of the item. Note that the expanding is executed manually by calling the ExpandHierarchyItem() method. So, you can use a dispatcher with a lower DispatcherPriority to delay this. Or alternatively, you can collapse the item before expanding it (using the CollapseHierarchyItem() method).
Per the thread at "http://www.telerik.com/forums/isexpandablebinding-requires-user-interaction-with-control-to-take-effect" I have modified the IsExpandedRowBinding sample to recreate the problem. I modified the button to expand and collapse the first row. To reproduce the problem: 1. Expand the first row. 2. Scroll down so the first row is not visible but it's children are visible. 3. Press the button. The expected behavior is the first row should collapse but nothing happens. 4. Scroll up so the first row is visible. The first row collapses.
As a workaround you can try executing the selection in a Dispatcher with DispatcherPriority.Render. This may not apply in the case when there are many nodes outside the View area.
Reproducible on http://demos.telerik.com/silverlight/#TreeListView/TreeListViewDragAndDrop
Items are expanded when they match the filtering criteria. Once I added the filterdescriptor, the tree started to expand itself and when I put a break point in RowIsExpandedChanged event handler the treelistviewrow's IsExpanded property is already true Can you have a look at the attached sample application and try to achieve the following: 1. keep the on demand load (so only loadchildren when user clicked on the arrow to expand) 2. apply filter only on the expanded nodes