Fragmente

Prin exemple de tot felul

Se poate întâmpla adesea să avem nevoie să afișăm elemente dintr-o colecție eterogenă într-o listă și fiecare articol din listă ar trebui să arate diferit, afișând alte proprietăți indiferent de tipurile specifice. Să vedem acum un exemplu ilustrativ.

acest lucru

Listă

Articolele sunt stocate într-un ListView. Acest lucru nu este neobișnuit pentru aplicațiile cu tehnologie XAML. În primul rând, detaliem un pic din exemplu și „povestea” acestuia.

Clase de modele

Avem un sistem de înregistrare a păsărilor. Următoarele caracteristici ale păsărilor sunt înregistrate uniform:

  • Nume,
  • kor (vârstă),
  • Personalitate,
  • Satisfacţie. Ar putea fi un reziduu
  • a hrăni (Feed) și
  • scare (Scare) Ca rezultat al hrănirii și al speriatului, pasărea noastră variază cumva pe o scară de 1-5 în funcție de specie. Personalitatea este o enumere.

O interfață comună pentru descrierea păsărilor este IBird. Deoarece diferitele rase de păsări răspund diferit la hrănire și speriat, implementarea lor este diferită, acestea sunt plasate în clase separate. Vom avea acum o clasă Owl, Owl și Pigeon, Dove, care va implementa interfața IBird.

Exemple de date

Din motive de simplitate, adăugăm acum eșantionul de date la fișierul codat în spate, nu folosim un model MVVM, scopul nu este să îl descriem. Nu uitați să setați DataContext, să utilizați o ObservabeCollection ca proprietate pentru listă și să o inițializați!

Notă: exemplul actual utilizează tehnologia WPF, pentru tehnologia UWP aceasta se va aplica unui obiect Page, nu unei ferestre. În ceea ce privește prezentarea DataTemplete, acest lucru nu afectează nimic.

ListView

Adăugați o ListView la MainWindow (WPF)/MainPage (UWP) care apare și faceți legarea datelor!

DataTemplate

Pentru a putea modifica afișajul după tip, mai întâi definim șabloanele care vor fi utilizate în codul XAML. Notă: Pentru WPF, pentru UWP

Ce face asta? Vom avea un OwlDataTemplate, un DoveDataTemplate și un DefaultDataTemplate DataTemplate care sunt ușor diferite în stil (de exemplu, culoarea de fundal).

DataTemplateSelector

Programul nu își va da seama automat dacă se folosește OwlDataTemplate pentru tipul Owl. Pentru a face acest lucru, trebuie să ne scriem propriul DataTemplateSelector.

Asigurați-vă că ramura implicită a casei de comutare este, de asemenea, acolo!

… Și conexiunea întregului

Piesele finite sunt „frământate împreună”.

App.xaml

Mai întâi, trebuie să adăugăm DataTemplateSelector ca resursă în App.xaml.

Acest lucru a făcut ca DataTemplateSelector să fie menționat și utilizat în cadrul aplicației.

Modificați ListView

Aveți deja ItemsSource, acum vine ItemTemplateSelector.

Suntem pregătiți pentru asta.

Modificare ulterioară

Dacă doriți să țineți evidența altor tipuri de păsări, acestea vor avea și un aspect implicit, pentru a ilustra acest lucru, adăugați o nouă specie de păsări și adăugați una la lista noastră, apoi priviți rezultatul!

Mai multe informatii

Documentația oficială pentru DataTemplateSelector este aici.