C# WPF - ListView nativ cu „blackjack și...”

Privind în viitor, să vedem ce s-a întâmplat:

blackjack
Figura 1 - Șablon cu diferite dimensiuni de afișare

afișare
Figura 2 - Șablon cu dimensiuni de afișare egale

afișare
Figura 3 - Faceți clic pe element

Deci, să ne uităm la abordarea de proiectare a structurii componente și să ne aprofundăm în cod.

Componenta conține o listă de obiecte, care este un set de date inițiale. Un delegat la o funcție pentru a converti dintr-un tip personalizat într-un șablon pentru afișare (clasa BlockTamplateBase). Șablonul de afișare (clasa BlockTamplateBase) conține informații despre zona de afișare și o funcție care descrie algoritmul de desen.

Să defalcăm câmpurile ListBlockView - Exemplul 1.

Implementarea evenimentului „Click on the element” - Exemplul 2. Puteți face un eveniment obișnuit, sau îl puteți face rutat. Pentru sarcina mea, obișnuitul este suficient.

Implementarea „Click on an element” atât cu mouse-ul, cât și programatic - Exemplul 3.

Și acum să analizăm cel mai interesant lucru - redarea componentei. În exemplul 4.

În continuare, vom lua în considerare posibilitățile de „elemente de colorare” bazate pe șabloane. Mă voi avansa spunând că această abordare oferă posibilitatea de a descrie un șablon personalizat, după cum este necesar. Șablonul de bază (BlockTemplateBase) este prezentat în exemplul 5.

Un șablon simplu (BlockTemplateSimple) pentru afișare, moștenit din șablonul de bază, este prezentat în exemplul 6.

Acum să ne uităm la un exemplu de caz de utilizare pentru această componentă. Pentru a face acest lucru, vom defini 2 clase de utilizatori de testare, așa cum se arată în exemplul 7.

În exemplul 8, inițializam componenta. În exemplul 9, algoritmul pentru conversia dintr-un tip personalizat într-un șablon.

Este afișată implementarea procesării clicurilor pe element.în exemplul 10.

De asemenea, a fost posibil să adăugați o sarcină de vizualizare generală a afișajului componentei în codul xaml și multe alte bunătăți - sunt multe dintre ele în WPF, dar să nu uităm că componenta a fost necesară „ieri” și „rapid”.

Deci, rezultatul este:

  • Componentă de tip ListView cu conținut eterogen;
  • Abilitatea de a seta algoritmul de redare a elementului (conversia unui tip personalizat într-un șablon de afișare);
  • Capacitatea de a crea un șablon de afișare „la nevoie” de către utilizatorul componentei conform unor principii simple (adică nu este foarte dificil să-l creați singur - fără restricții);
  • Modul virtual al componentei (adică ieșirea (redarea) merge din mers) - acest lucru accelerează munca componentei (nu trebuie să facem nimic cu datele sursă, doar desenați câteva elemente din lista sursă);
  • Abilitatea de a lucra rapid la orice cantitate de date sursă (atât cât se potrivește Lista).

Puteți ajuta și transfera niște fonduri pentru dezvoltarea site-ului