La façon la plus simple est d'utiliser les liaisons et HierarchicalDataTemplate
. Déclarer une classe avec vos données:
class Item : INotifyPropertyChanged
{
public Item()
{
this.Children = new ObservableCollection<Item>();
}
public event PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public ObservableCollection<Item> Children { get; private set; }
}
Et définir un HierarchicalDataTemplate
pour ce type:
<HierarchicalDataTemplate DataType="{x:Type my:Item}"
ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
Maintenant, il vous suffit de lier le ItemsSource
du TreeView
à votre collection d'articles de haut niveau, et les nœuds d'arbre seront construits automatiquement. Si vous devez ajouter (ou supprimer) un nœud, ajoutez simplement un élément à (ou supprimez-le) de la collection parent
Pour cet exemple, j'ai utilisé un type d'élément unique, mais si vous avez plusieurs types à afficher dans le TreeView
vous devrez définir un HierarchicalDataTemplate
pour chacun. Pour les nœuds feuille (nœuds sans enfants), vous pouvez simplement utiliser un DataTemplate
Si vous omettez le fait que je ne déclare pas le DataType et que Header ne semble pas exister, j'ai pu le faire fonctionner avec différents objets avec plus de alors un type. la date affichée a le même nom de propriété pour que cela fonctionne. Ce n'est peut-être pas le meilleur moyen, mais comme l'affichage doit être simple, je vais le faire comme ça pour l'instant. –
En effet, il y avait une erreur dans mon code, la propriété Header n'existe pas ... c'est corrigé maintenant –