Domanda

Esiste un modo per caricare nodi figlio solo quando il nodo padre è espanso? Il problema che sto riscontrando è che l'icona "espandi" non viene visualizzata se un nodo non ha figli. Dal momento che non voglio caricare i bambini fino a quando non si fa clic sull'icona, mi rimane un po 'un problema 22.

È stato utile?

Soluzione

Con le viste ad albero di solito devi caricare i figli di ciascun nodo visualizzato.

Quindi se visualizzi solo il root devi caricare anche i figli di root. Una volta che si espande la radice, è necessario caricare i figli di ciascun figlio se si desidera espandere le cose per quei figli.

Altri suggerimenti

Per prima cosa, leggi questo post: http://bea.stollnitz.com/blog/?p=55

In secondo luogo, ereditare TreeViewItem e 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;
    }
}

Terzo, vincolando la proprietà del tuo Modello a " IsExpanded " ;.

È perfettamente possibile che i controlli dell'albero caricino i nodi figlio su richiesta, e puoi farlo con Silverlight TreeView. Quando si popolano i nodi radice se i dati per questo provengono da un database, ad esempio, per ogni nodo viene restituito anche se ha figli o meno, se si aggiunge quindi un figlio fittizio, questo farà sì che il controllo metta un + accanto a esso. Gestisci l'evento espanso e in questo vedi se il figlio è il nodo fittizio, se lo rimuove, prendi i figli dal database e aggiungili.

Stavo anche guardando questo. Penso che sia necessario scrivere la propria sottoclasse del TreeNode che carica i nodi figlio su richiesta.
Un approccio che ho usato in Windows Form TreeView è stato quello di aggiungere un nodo figlio vuoto a ciascun nodo e quindi rimuoverlo quando il nodo è stato espanso e sono necessari i nodi figlio reali. Il problema con questo approccio è che ottieni falsi nodi espandibili, ma se riesci a convivere con esso allora è una soluzione semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top