Не создавайте дерево самостоятельно. TreeView-control - это один из контроллеров, который получает большую выгоду от DataBinding и даже больше от MVVM. Без этого может быть больно работать. С DataBinding и MVVM использовать TreeView очень просто:
У вас уже есть хороший источник для TreeView. Это ваш класс Node
. Установите список для корневого узла в качестве ItemsSource вашего TreeView ...
m_treeView.ItemsSource=new List<Node>(){yourRootNode};
... Создайте шаблон HierarchicalDatraTemplate для ваших узлов. Что-то вроде ...
<HierarchicalDataTemplate x:Key="TreeViewItem_HierarchicalDataTemplate" ItemsSource="{Binding Children}" >
<TextBlock Text="{Binding Content}" />
</HierarchicalDataTemplate>
... и соответственно задайте шаблон элементов TreeView ...
<TreeView Name="m_treeView" ItemTemplate="{StaticResource TreeViewItem_HierarchicalDataTemplate}" .../>
Если Node-класс уже является ViewModel, может быть интересно также включить свойство IsSelected и IsExpandend и привязать к нему свойства ItemsContainerStyle (не забывайте о событии INotifyPropertyChanged) ..
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
В начале это немного больше работы, но это может сэкономить вам часы времени, если вы затем захотите выполнять более сложные операции, такие как автоматический выбор и расширение.