Wpf, creând noduri treeview

Controalele TreeView sunt adesea folosite pentru a găzdui cantități mari de date. Acest lucru se explică prin faptul că TreeView are o structură expandabilă pliabilă. Chiar dacă utilizatorul scroll TreeView de sus în jos, informațiile vizibile nu sunt neapărat vizibile. Informațiile care nu sunt vizibile pot fi, în general, să fie ignorate în controlul TreeView, reducând cheltuielile generale (și timpul necesar pentru a le umple). Chiar mai bine, atunci când deschideți elementul TreeViewItem, este declanșat un eveniment Expanded. și când este închis, evenimentul Collapsed. Acest punct este foarte util pentru adăugarea de noduri lipsă sau pentru eliminarea celor care nu mai sunt necesare. Această abordare se numește crearea "just-in-time" a nodurilor.







Deși controlul TreeView poate fi umplut cu structura directoarelor unității de hard disk, acest proces este deprimant lent. Este mult mai bine atunci când este afișată o vizualizare parțial colapsată, iar utilizatorul este rugat să ajungă în mod independent la anumite directoare. Atunci când extindeți fiecare nod, subdirectoarele corespunzătoare sunt adăugate copacului, iar acest proces are loc aproape instantaneu:

Wpf, creând noduri treeview

În aplicarea controlului TreeView cu capacitatea de a stabili rapid unități pentru afișarea directoarelor de pe hard disk nimic nou. Primul pas este să adăugați o listă de discuri în TreeView când fereastra este încărcată pentru prima oară. Inițial, nodul pentru fiecare disc este prezentat într-o formă restrânsă. Litera de unitate este afișată în antet și DriveInfo obiect este stocat în proprietatea TreeViewItem.Tag pentru a simplifica subdirectoarele de căutare în viitor, fără a recrea obiectul. (Acest lucru crește deasupra capului a aplicațiilor asociate cu memoria, dar în același timp, reduce numărul de controale de securitate pentru a accesa fișiere. Efectul general este neglijabil, dar îmbunătățește ușor performanța și simplifică codul.) Aici este codul în care TreeView este umplut cu lista de unități utilizând clasa System.IO.DriveInfo:







Acest cod adaugă sub nodul fiecărui disc un substituent (un asterisc). Acest indicator nu este afișat, deoarece nodul este primul în starea restrânsă. Când extindeți un nod, puteți să ștergeți acest index și să adăugați o listă de subdirectoare în locul acestuia.

Pentru a implementa crearea online a nodurilor, trebuie să rezolvați evenimentul TreeViewItem.Expanded. Deoarece acest eveniment suportă propagarea bulelor, manipulatorul de evenimente poate fi atașat direct elementului TreeView astfel încât să se ocupe de evenimentul Expanded al oricărui TreeViewItem care se află în interiorul acestuia:

În prezent, codul de mai sus se actualizează de fiecare dată când elementul este extins. Dacă doriți, puteți să vă asigurați că actualizarea este efectuată numai atunci când elementul este pentru prima dată extins și indicatorul de locație este găsit. Acest lucru va reduce cantitatea de muncă pe care aplicația va trebui să o efectueze, dar va crește și probabilitatea de a afișa informații învechite.

Alternativ, puteți face actualizarea a fost efectuată pentru fiecare element este selectat, prin evenimente de prelucrare ViewItem.Selected, sau componente, cum ar fi de a folosi System.IO.FileSystemWatcher de așteptare pentru notificarea din sistemul de operare prin adăugarea, ștergerea sau redenumirea dosare. componenta FileSystemWatcher este singura modalitate de a se asigura că actualizarea de directoare vor fi efectuate imediat cu apariția de schimbare, dar este plină de cea mai mare deasupra capului.

Combinând cu TreeView caracteristicile puternice ale șabloanelor de control. puteți obține o mulțime de lucruri. De exemplu, puteți crea controale care sunt radical diferite în ceea ce privește aspectul și comportamentul, pur și simplu prin înlocuirea șabloanelor pentru comenzile TreeView și TreeViewItem.







Articole similare

Trimiteți-le prietenilor: