Existe-t-il un moyen de charger uniquement les nœuds enfants lorsque le nœud parent est développé? Le problème que je rencontre est que l'icône "expand" n'apparaît pas si un noeud n'a aucun enfant. Comme je ne veux pas charger les enfants tant que l'icône n'est pas cliquée, il me reste un peu d'un crochet 22.Silverlight TreeView - Charger les données lorsque le nœud est développé
Répondre
Avec les vues arborescentes, vous devez généralement charger les enfants de chaque nœud affiché.
Donc, si vous affichez seulement la racine, vous devez aussi charger les racines des enfants. Une fois que vous développez la racine, vous devez charger les enfants de chaque enfant si vous voulez les développer pour ces enfants.
Je regardais aussi ceci. Je pense que vous devez écrire votre propre sous-classe de TreeNode qui charge les nœuds enfants à la demande.
Une approche que j'ai utilisée dans un formulaire TreeView de fenêtres consistait à ajouter un nœud enfant vide à chaque nœud, puis à le supprimer lorsque le nœud était développé et que les vrais nœuds enfants étaient nécessaires. Le problème avec cette approche est que vous obtenez de faux nœuds extensibles, mais si vous pouvez vivre avec, alors c'est une solution simple.
Il est parfaitement possible que des contrôles d'arbre chargent les nœuds enfants à la demande, ce que vous pouvez faire avec Silverlight TreeView. Lorsque vous remplissez les noeuds racine si les données proviennent d'une base de données par exemple, alors pour chaque noeud retournera s'il a des enfants ou non, si cela ajoute un enfant fictif, cela fera passer le contrôle à + à côté de il. Gérez l'événement développé et, dans ce cas, voyez si l'enfant est le noeud factice, s'il est supprimé, récupérez les enfants de la base de données et ajoutez-les.
D'abord, lisez ce post: http://bea.stollnitz.com/blog/?p=55
En second lieu, hériter TreeViewItem et TreeView:
public class TreeViewItemEx : TreeViewItem {
protected override DependencyObject GetContainerForItemOverride() {
TreeViewItemEx tvi = new TreeViewItemEx();
Binding expandedBinding = new Binding("IsExpanded");
expandedBinding.Mode = BindingMode.TwoWay;
tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
return tvi;
}
}
public class TreeViewEx : TreeView {
protected override DependencyObject GetContainerForItemOverride() {
TreeViewItemEx tvi = new TreeViewItemEx();
Binding expandedBinding = new Binding("IsExpanded");
expandedBinding.Mode = BindingMode.TwoWay;
tvi.SetBinding(TreeViewItemEx.IsExpandedProperty, expandedBinding);
return tvi;
}
}
En troisième lieu, liant la propriété de votre modèle à "IsExpanded".