TreeView, HierarchicalDataTemplate et de Données récursive
Pour mon treeview j'ai deux classes différentes qui fournissent l'ItemsSource.
public class TreeViewModel : ViewModelBase
{
public ObservableCollection<NodeViewModel> Items { get; set; }
}
public class NodeViewModel : ViewModelBase
{
public string Id { get; set; }
public string Name { get; set; }
public ObservableCollection<NodeViewModel> Children { get; set; }
}
Maintenant, je veux mon TreeView pour afficher les Éléments dans TreeViewModel et de montrer hiérarchique des données fournies par les NodeViewModel.
Voici mon code XAML
<Window x:Class="TreeViewMasterDetails.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TreeViewMasterDetails"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView Height="Auto"
HorizontalAlignment="Stretch"
Margin="10"
VerticalAlignment="Stretch"
Width="Auto">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="x:Type local:TreeViewModel" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="x:Type local:NodeViewModel" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"></TextBlock>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
Avons essayé de fournir Items
comme le ItemsSource
de la TreeView
.
Il n'affiche pas les données de façon hiérarchique, si l'affichage n'importe quoi.
Et j'ai essayé d'utiliser le ItemTemplate
au lieu de la TreeView.Resources
, trop.
Ce qui est mal à cela?
Peut-être un problème est la première TextBlock Text Binding
?
Je veux afficher les Name
propriété de la NodeViewModel
dans Items
.
Je pense que c'est un doublon de [WPF TreeView HierarchicalDataTemplate de liaison de l'objet, avec de multiples collections enfant][1]. [1]: stackoverflow.com/questions/1912481/...
Oui, j'ai déjà vu ça. Mais il ne fonctionne pas ici.
Veuillez voir ma mise à jour de question
TreeViewModel n'a pas un Nom de propriété, mais ce n'est probablement pas la question
Aucune chance pour ce faire sur Windows Phone?
Oui, j'ai déjà vu ça. Mais il ne fonctionne pas ici.
Veuillez voir ma mise à jour de question
TreeViewModel n'a pas un Nom de propriété, mais ce n'est probablement pas la question
Aucune chance pour ce faire sur Windows Phone?
OriginalL'auteur Mare Infinitus | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
@Sa_ddam213 dit, vous avez seulement besoin de l'
HierarchicalDataTemplate
pourNodeViewModel
, mais le seul problème avec votre code a été l'absence des accolades ({
et}
) pourDataType="x:Type local:TreeViewModel"
dans votre modèle de données de définitions (il doit êtreDataType="{x:Type local:TreeViewModel}"
). Ajouter des parenthèses etItemsSource
de liaison de résoudre le problème:Supplémentaires
HierarchicalDataTemplate
pourTreeViewModel
n'est pas utilisé, mais il ne fait pas de mal.ItemTemplate
, mais pas dansResources
.C'est parce que lorsque utilisé int
ItemTemplate
, il aid a pas besoin de regarder leDataType
de la propriété. Vous êtes directement en disant à l'TreeView
d'utiliser le modèle pour les éléments. Donc, pas besoin deDataType
.OriginalL'auteur Mohammad Dehghan
Vous ne devriez avoir à déclarer la
HierarchicalDataTemplate
pourNodeViewModel
que c'est la seule chose à montrer dans laTreeView
, et de lier le réelItemSource
à laTreeView
Exemple Complet
Xaml:
Code:
Résultat:
Salut, merci pour le partage, j'ai utilisé votre solution, toutefois, il ne semble pas me laisser sélectionner anyhting et aussi les flèches sur la gauche sont manquants. L'arbre semble gelé. Un seul changement que j'ai fait pour vous code, je lier mon TreeModel de ma classe ViewModel pas de MainWindow.
A bien fonctionné pour moi. Voir aussi stackoverflow.com/questions/2251260 si vous voulez des Cases à cocher qui se propagent au lieu de TextBlocks.
OriginalL'auteur sa_ddam213