XAML:

<Window x:Class="TreeViewAutoExpand.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewModel="clr-namespace:TreeViewAutoExpand.ViewModel"
        xmlns:model="clr-namespace:TreeViewAutoExpand.Model"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <viewModel:TreeViewAutoExpandViewModel x:Key="TreeViewAutoExpandViewModel" />
        </Grid.Resources>
        <TreeView x:Name="MyTreeView" DataContext="{StaticResource TreeViewAutoExpandViewModel}" ItemsSource="{Binding TreeViewAutoExpandItems}" Loaded="MyTreeView_Loaded">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type model:TreeViewAutoExpandModel}">
                    <TreeViewItem x:Name="myTreeViewItem" Header="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
            
        </TreeView>
    </Grid>
</Window>

Thing to notice:

<TreeView x:Name="MyTreeView" DataContext="{StaticResource TreeViewAutoExpandViewModel}" ItemsSource="{Binding TreeViewAutoExpandItems}" Loaded="MyTreeView_Loaded">

Code:

using System.Windows;

namespace TreeViewAutoExpand
{
  using System.Windows.Controls;

  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    private void ShowSelectedThing(ItemsControl parentContainer)
    {
      // check current level of tree
      foreach (object item in parentContainer.Items)
      {
        TreeViewItem currentContainer = (TreeViewItem)parentContainer.ItemContainerGenerator.ContainerFromItem(item);
        if (currentContainer != null)
        {
          currentContainer.IsExpanded = true;
        }
      }
    }

    private void MyTreeView_Loaded(object sender, RoutedEventArgs e)
    {
      ShowSelectedThing(MyTreeView);
    }

  }
}

Example you can download from here.