Самый простой способ, которым я смог достичь этого, - это стили (вы можете хранить все в XAML, и вам не нужны никакие специальные свойства MVVM). Вы можете установить ItemContainerStyle верхнего уровня для фактического элемента TreeView, чтобы стилизовать корневой TreeViewItem и отображать его как развернутый. Затем установите ItemContainerStyle для вашего элемента HierarchicalDataTemplate в качестве стиля TreeViewItem по умолчанию для всех узлов на других уровнях. Атрибут BasedOn позволяет легко наследовать весь стиль TreeViewItem и изменять только свойство IsExpanded.
Основной TreeView XAML:
<TreeView x:Name="Tree" ItemContainerStyle="{StaticResource RootTreeViewItemStyle}">
<TreeView.ItemTemplate>
<common:HierarchicalDataTemplate ItemContainerStyle="{StaticResource TreeViewItemStyle}">
<!-- rest of your template... -->
</common:HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Ваш базовый стиль TreeViewItem:
<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
<!-- your normal or default TreeViewStyle... -->
</Style>
Корневой стиль TreeViewItem:
<Style x:Key="RootTreeViewItemStyle" TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemStyle}">
<Setter Property="IsExpanded" Value="True"/>
</Style>