Cunoștințe, prelegere, baze de date obligatorii în wpf

Folosind proprietatea DataContext a elementelor pentru a atribui o sursă de legare

Uneori, mai mulți receptoare trebuie să fie conectați la aceeași sursă. Pentru a nu duplica numele sursei în fiecare expresie obligatorie și pentru a automatiza cumva această sarcină, în WPF folosiți foarte des proprietatea DataContext. Această proprietate este introdusă de clasa FrameworkElement și este moștenită de fiecare element derivat din această clasă. Utilizarea sa este o modalitate alternativă de identificare a obiectului sursă implicat în legare.







Dacă atributul sursă nu este specificat în expresia de legare a elementului țintă utilizând valoarea atributului Source. atunci WPF îl va căuta automat în elementul cu expresia de legare și apoi în elementele părintelui în sus către rădăcina copacului logic până când sursa nu va fi găsită. Dacă sursa nu este găsită, WPF va rămâne pur și simplu tăcut, deoarece mecanismul de legare nu generează excepții. În mod obișnuit, ei încearcă să restrângă domeniul de căutare prin plasarea definiției proprietății DataContext în cel mai apropiat container parental care cuprinde receptoarele legare.

În timp ce caută prin arbore, WPF încearcă să găsească primul context de date DataContext. nu este egal cu nul. Dacă este găsit contextul de date, acesta este folosit pentru legare, dacă nu, atunci expresia de legare nu aplică nici o valoare elementului țintă și nu va afișa nimic.

Să presupunem că există mai multe controale TextBlock. asociate în mod explicit cu aceeași sursă de legare:

Și aici sunt aceleași trei controale TextBlock. Legat de contextul de date al DataContext al containerului StackPanel:

Dacă atributul DataContext nu este definit în următorul container apropiat, căutarea va continua în următorul container extern până când nu se găsește un context de date non-zero DataContext sau căutarea nu reușește.







Fila Page3. Folosind proprietatea DataContext în elementul țintă

În exemplul următor, proprietatea DataContext este plasată în receptorul de legare.

  • Adăugați o nouă filă Page3 în containerul TabControl cu ​​următorul marcaj

atribut Element Scrollbar Maxim = „100“ înseamnă superioară domeniului de valori limită, LargeChange = „10“ - pas repoziționarea glisorul de clicuri pe zonele din dreapta și din stânga din ea, SmallChange = „1“ - increment valori clicuri pe elementele de linie capăt . În acest exemplu, orice avantaj DataContext proprietate nu da, ci pur și simplu se divide expresia de legare în două părți.

  • Rulați aplicația - fila Page3 va furniza următoarea zonă de ieșire

Cunoștințe, prelegere, baze de date obligatorii în wpf

Fila pagină. Folosind proprietatea DataContext din elementul părinte

  • Adăugați o nouă pagină de filă în containerul TabControl.
  • Mutați atribuirea sursei de proprietăți DataContext de la receptor la elementul părinte după cum urmează

element de asemenea, moștenește clasa FrameworkElement și conține proprietatea DataContext.

  • Examinați lucrul din fila Page - nu se va deosebi în nimic de tab-ul Page3.

Fila Page5. Legați mai multe receptoare la o singură sursă fără proprietatea DataContext

Să luăm în considerare un exemplu, când refuzul de a utiliza proprietatea DataContext implică un cod de marcare relativ greoaie.

  • Adăugați tab-ul Page5 cu următorul marcaj în containerul TabControl:
  • Rulați aplicația - rezultatul va fi

Cunoștințe, prelegere, baze de date obligatorii în wpf

Fila Page. Legați mai multe receptoare la o singură sursă folosind proprietatea DataContext

  • Adăugați o nouă pagină Page6 și rescrieți aspectul eșantionului anterior

Datorită faptului că am eliminat codul duplicat din aceeași sursă din legăturile elementelor țintă și l-am plasat în proprietatea DataContext a elementului părinte, codul de legare a devenit mai elegant.

  • Lansați aplicația - pagina Page 6 se potrivește complet panoului de ieșire din fila Page5

Să facem câteva comentarii:







Articole similare

Trimiteți-le prietenilor: