Silverlight TreeView: carica i dati quando il nodo viene espanso
-
10-07-2019 - |
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.
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.