Question

Existe-t-il un moyen de ne charger que les nœuds enfants lorsque le nœud parent est développé? Le problème que je rencontre est que le & # 8220; développement & # 8221; L’icône ne s’affiche pas si un nœud n’a pas d’enfants. Étant donné que je ne souhaite pas charger les enfants tant que l'utilisateur n'a pas cliqué sur l'icône, je suis un peu pris au piège 22.

Était-ce utile?

La solution

Dans les arborescences, vous devez généralement charger les enfants de chaque nœud affiché.

Ainsi, si vous affichez uniquement la racine, vous devez également charger les enfants de racines. Une fois que vous développez la racine, vous devez charger les enfants de chaque enfant si vous voulez les éléments de développement pour ces enfants.

Autres conseils

D'abord, lisez ce post: http://bea.stollnitz.com/blog/?p=55

Deuxièmement, hériter de 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;
    }
}

Troisièmement, lier la propriété de votre modèle à "IsExpanded".

Il est parfaitement possible que des contrôles d'arborescence chargent les nœuds enfants à la demande, et vous pouvez le faire avec Silverlight TreeView. Lorsque vous remplissez les noeuds racine si les données à ce sujet proviennent d'une base de données, par exemple, chaque noeud renvoie également s'il a ou non des enfants. S'il ajoute un enfant factice, le contrôle sera placé à côté de + il. Gérez l'événement développé et voyez si l'enfant est le nœud factice. S'il est supprimé, récupérez-les de la base de données et ajoutez-les.

Je regardais aussi cela. 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 Windows TreeView 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, sa solution est simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top