У меня есть набор объектов базы данных, каждый из которых содержит коллекции объектов Schema и объекты User. Я хочу привязать их к TreeView, но добавив дополнительные статические уровни в иерархии, чтобы получившийся TreeView выглядел более или менее следующим образом:
<TreeView>
<TreeViewItem Header="All the databases:">
<TreeViewItem Header="Db1">
<TreeViewItem Header="Here all the schemas:">
<TreeViewItem Header="Schema1"/>
<TreeViewItem Header="Schema2"/>
</TreeViewItem>
<TreeViewItem Header="Here all the users:">
<TreeViewItem Header="User1"/>
<TreeViewItem Header="User2"/>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Db2">
<TreeViewItem Header="Here all the schemas:">
<TreeViewItem Header="Schema1"/>
<TreeViewItem Header="Schema2"/>
</TreeViewItem>
<TreeViewItem Header="Here all the users:">
<TreeViewItem Header="User1"/>
<TreeViewItem Header="User2"/>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
</TreeView>
Мне удалось приблизиться к тому, что я хочу, используя следующие шаблоны:
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type smo:Database}">
<TreeViewItem Header="{Binding Path=Name}">
<TreeViewItem Header="Here all the schemas:" ItemsSource="{Binding Path=Schemas}"/>
<TreeViewItem Header="Here all the users:" ItemsSource="{Binding Path=Users}"/>
</TreeViewItem>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type smo:Schema}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type smo:User}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</Window.Resources>
Затем в коде я устанавливаю привязку следующим образом:
TreeViewItem treeViewItem = new TreeViewItem();
treeViewItem.Header = "All the databases:";
treeViewItem.ItemsSource = server.Databases;
treeView.Items.Add(treeViewItem);
В результате TreeView выглядит так, как я хочу, но невозможно выбрать конкретную схему или пользователя. По-видимому, WPF видит все поддерево, внедренное в базу данных node как отдельный элемент, и оно выбирает только все. Мне нужно иметь возможность выбирать конкретную схему, пользователя или базу данных. Как настроить шаблоны и привязки так, чтобы они работали так, как мне нужно?