У вас нет элементов коллекции в вашей MenuItemViewModel.Способ работы иерархической таблицы данных заключается в том, что она связывает источник элементов дочернего меню со свойством родителя.Так как у вас этого нет, лучшее, что может случиться, это просто получить верхний уровень.
Вот несколько упрощенных разметок и кода:
<Menu ItemsSource="{Binding MenuItems}" Height="30">
<Menu.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding Path=Header}"/>
<Setter Property="Command" Value="{Binding Path=Command}"/>
</Style>
<HierarchicalDataTemplate
DataType="{x:Type local:MenuItemVM}"
ItemsSource="{Binding SubItems}">
</HierarchicalDataTemplate>
</Menu.Resources>
</Menu>
В моей модели окна просмотра я установил несколькобазовые данные:
private ObservableCollection<MenuItemVM> menuItems = new ObservableCollection<MenuItemVM>(
new List<MenuItemVM>
{
new MenuItemVM{ Header="File", SubItems= new ObservableCollection<MenuItemVM>( new List<MenuItemVM>
{
new MenuItemVM{ Header="Open"},
new MenuItemVM{ Header="Save"}
})
}
}
);
И мое упрощенное меню:
public class MenuItemVM
{
public string Header { get; set; }
public ICommand Command { get; set; }
public ObservableCollection<MenuItemVM> SubItems { get; set; }
}