I tienen una colección de Base de datos objetos, cada uno con colecciones de esquema objetos y usuario objetos. Quiero unir a un TreeView, pero la adición de niveles estáticos adicionales en la jerarquía, por lo que el TreeView resultante se ve más o menos así:¿Cómo mezclar niveles enlazados y estáticos en un TreeView?
<TreeView>
<TreeViewItem Header="All the databases:">
<TreeViewItem Header="Db1">
<TreeViewItem Header="Here's all the schemas:">
<TreeViewItem Header="Schema1"/>
<TreeViewItem Header="Schema2"/>
</TreeViewItem>
<TreeViewItem Header="Here's all the users:">
<TreeViewItem Header="User1"/>
<TreeViewItem Header="User2"/>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Db2">
<TreeViewItem Header="Here's all the schemas:">
<TreeViewItem Header="Schema1"/>
<TreeViewItem Header="Schema2"/>
</TreeViewItem>
<TreeViewItem Header="Here's all the users:">
<TreeViewItem Header="User1"/>
<TreeViewItem Header="User2"/>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
</TreeView>
pude llegar muy cerca de lo que quiero mediante el uso de las siguientes plantillas:
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type smo:Database}">
<TreeViewItem Header="{Binding Path=Name}">
<TreeViewItem Header="Here's all the schemas:" ItemsSource="{Binding Path=Schemas}"/>
<TreeViewItem Header="Here's 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>
Luego, en el código que establecen la unión de esta manera:
TreeViewItem treeViewItem = new TreeViewItem();
treeViewItem.Header = "All the databases:";
treeViewItem.ItemsSource = server.Databases;
treeView.Items.Add(treeViewItem);
el TreeView resultante se ve como yo quiero que, pero no es posible seleccionar un esquema o usuario particular. Aparentemente, WPF considera que el subárbol completo está enraizado en un nodo de base de datos como un solo elemento, y solo selecciona todo. Necesito poder seleccionar un esquema, usuario o base de datos en particular. ¿Cómo configuro las plantillas y los enlaces para que funcione de la manera que necesito?
¡Yay! Funciona perfectamente –
¿Existe la posibilidad de que el ejemplo de trabajo que proporcionó aún exista? Intenté acceder a él y el enlace parece estar roto. – psubsee2003