Для тех, кто все еще ищет правильное решение этой проблемы, вот один ниже. Я нашел это в комментариях к статье проекта кода «Выбор WPF TreeView» http://www.codeproject.com/KB/WPF/TreeView_SelectionWPF.aspx от DaWanderer.
Он был опубликован Kenrae 25 ноября 2008 года. Это отлично сработало для меня. Спасибо Кенре!
Вот его пост:
Вместо того, чтобы ходить по дереву, используйте свой собственный объект данных со свойством IsSelected (и я тоже рекомендую свойство IsExpanded). Определите стиль для TreeViewItems дерева, используя свойство ItemContainerStyle в TreeView, которое связывает эти свойства из TreeViewItem с вашими объектами данных. Примерно так:
<Style x:Key="LibraryTreeViewItemStyle"
TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight"
Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="FontWeight"
Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
<TreeView ItemsSource="{Binding Path=YourCollection}"
ItemContainerStyle="{StaticResource LibraryTreeViewItemStyle}"
ItemTemplate={StaticResource YourHierarchicalDataTemplate}/>