The right way to do this is to use HierarchicalDataTemplate. The simplest I can imagine is the following:
<UserControl.Resources>
<HierarchicalDataTemplate
x:Key="RecursiveData" DataType="TreeViewItem" ItemsSource="{Binding Items}">
</HierarchicalDataTemplate>
</UserControl.Resources>
What can be used in XAML as follows:
<TreeView ItemTemplate="{StaticResource RecursiveData}" />
Of course, you can customize the template as you wish with styles and subcomponents.
, ItemSource TreeView TreeViewItem, TreeViewItem Items.