С небольшой помощью обзора шаблонов данных MSDN , я думаю, что следующее будет делать то, что вы хотите. Обратите внимание, что я добавил в древовидную структуру элемент «Все пользователи» верхнего уровня:
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:UserViewModel}" ItemsSource="{Binding Path=Permission}">
<TextBlock Text="{Binding Path=UserName}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type sys:String}">
<TextBlock Text="{Binding}"/>
</DataTemplate>
</Window.Resources>
...
<TreeView Height="250" VerticalAlignment="Bottom" Width="500" Margin="0,39,0,0">
<TreeViewItem ItemsSource="{Binding Path=TheUsers}" Header="All Users" />
</TreeView>
Замените префикс local
на префикс пространства имен, связанный с пространством имен, в котором живет ваш класс UserViewModel.
Вы можете установить IsExpanded="True"
на <TreeViewItem>
, если хотите, чтобы древовидная структура отображалась с расширенным элементом «Все пользователи».
Обратите внимание, что я использовал обычный DataTemplate
для разрешений, потому что я не думаю, что вы хотите, чтобы древовидная структура расширялась дальше разрешения. (Дерево может расширяться, потому что разрешения string
с и string
с реализуют IEnumerable<char>
. Если вы попытаетесь раскрыть строку, вы получите список отдельных символов строка.)