Dezvoltarea de ferestre de aplicații universale 10

A doua parte a articolului dedicat de legare a datelor, precum și utilizarea sa pentru programare pentru Windows 10 aplicații universale.

2.5. Direcția de legare

Să curgă din nou am creat aplicații Bindings1, dar acum introducem o valoare în câmpul de intrare inci. Pe măsură ce transmite rapid focalizarea pe centimetrii din câmpul de intrare (de exemplu, prin apăsarea ), Acesta din urmă apare doar că valoarea introdusă de către noi. După cum puteți vedea, munca noastră de legare nu numai în „înainte“ direcția - de la sursa la receptor - dar, de asemenea, în „inversă“ - de la receptor la sursa.

dezvoltatorii de aplicații universale în acest caz, spun că legarea celor două sensuri a fost creat.

În secțiunea 2.4 am menționat proprietatea Mode a clasei Legare. Doar stabilește direcția în care lucrarea va fi obligatorie. Și, după cum indică valoarea sa una dintre BindingMode enumerate elementele:

  • TwoWay pe opțiunea - legare cu două sensuri, am analizat deja.
    Odată ce valoarea receptorului este schimbat, acesta este imediat transferat în proprietatea sursă asociată. Excepția este o proprietate text. Valoarea de transfer se efectuează numai după ce elementul de control pierde focalizarea (așa cum am văzut mai devreme);
  • Oneway - o legare unidirecțională. care funcționează numai în „înainte“ direcția - de la sursa la receptor. Este nevoie de mai puține resurse de sistem decât bidirecțional, deoarece nu este nevoie de a monitoriza modificarea valorii unei proprietăți a receptorului și, respectiv, l transporta la sursa;
  • OneTime - legarea într-o etapă. caracterizat prin unidirecțională, astfel încât valoarea de transfer se efectuează o singură dată, imediat după pornirea aplicației. În cazul în care operațiunea de program nu are nevoie de resurse de sistem, de îndată ce valoarea de transfer se elimină legarea.

Se specifică direcția de legare putem așa cum am cunoscut caseta de dialog, de a crea un date cu caracter obligatoriu. Am obține în același mod ca și a făcut-o anterior: click pe un buton pătrat dispus la dreapta controlul necesar în panoul Proprietăți. și alegeți din meniul care apare Creează date cu caracter obligatoriu.

In grupul fereastra razvernom controlează mai mulți parametri (Fig. 7). Va fi direcția de legare disponibilă drop-down (modul). în care pentru a selecta elementul dorit.

Dezvoltarea de ferestre de aplicații universale 10

Fig. 7. Caseta de dialog Crearea de date de legare (grup dislocat mai mulți parametri)

Ca un experiment, putem indica direcția noastră oneway de legare (adică, pentru a crea o legare one-way). În acest caz, atunci când intră într-o nouă valoare în câmpul de intrare inches (de exemplu, receptor), această valoare nu va fi transferată la sursa - câmpul Centimetri. Chiar și după pierderea primului câmp de focalizare de intrare.

O legare cu direcția OneTime (o singură etapă), în acest caz, în general, inutil. Odată ce aplicația este pornită, valoarea centimetrii câmpul de intrare - linie goală - vor fi transferate la inches câmp de intrare. după care legarea nu va mai funcționa. Și nu ne-ar fi introdus în primul câmp, al doilea va rămâne goală.

2.6. Utilizarea transmițătoare de valori

Se pare că am scris o cerere pentru a converti valori de la inci la centimetri și vice-versa. Atunci de ce este valoarea introdusă de către noi este transferată așa cum este, fără nici o conversie? Trebuie să reparăm asta.


2.6.1. Crearea de convertoare de valoare

date cu caracter obligatoriu UWP permite convertirea valorilor transportate de la un format la altul - aceasta este una dintre caracteristicile avansate, care au fost menționate anterior în acest articol. În acest scop, valorile convertoarelor așa-numitul.

Valoarea convertor trebuie să fie o clasă care implementează IValueConverter de interfață. care este declarat în spațiul de nume Windows.UI.Xaml.Data. Această interfață acceptă două metode:

  • Conversia - realizează conversia atunci când transferul unui „înainte“ direcția - de la sursa la receptor;
  • ConvertBack - efectuează conversia în timpul transferului către direcția „inversă“ - de la sursa la receptor.

Ambele metode iau același set de argumente:

  • valoarea reală care urmează să fie convertită - tip System.Object;
  • tip de desemnare, în care trebuie transformată, - un element de transfer de System.Type predeterminat;
  • un argument suplimentar poate fi specificat în parametrii de legare - tip System.Object (de fapt, acest argument poate fi de orice tip). Acesta poate fi folosit, de exemplu, pentru a selecta modul de conversie din setul disponibil;
  • limbă desemnare și cultură, având în vedere, care este conversia care urmează să fie efectuată, - un șir de caractere.

Adăugați un element nou proiect Visual Studio, cum ar fi un fișier cu un program de C # -Code, în trei moduri. În primul rând, este posibil să se găsească într-o listă ierarhică, care se află în panoul Solution Explorer. „Filiala“, care reprezintă proiectul în sine (în acest caz, „ramură“ Bindings1 (Universal Windows)), faceți clic pe butonul din dreapta al mouse-ului, selectați pop-up pe ecran element de meniu contextual pentru a adăuga. și în submeniul care apare după - punctul Articol nou. În al doilea rând, aveți posibilitatea să faceți clic pe Adăugare element din meniu nou proiect. În al treilea rând, aveți posibilitatea să apăsați combinația de taste ++.

După oricare dintre aceste acțiuni pe ecran apare Add New caseta de dialog Element (fig. 8). Lista din mijlocul ferestrei, selectați tipul de element pe care urmează să fie adăugate (în cazul nostru -. Para de clasă pentru că vom adăuga la fișierul de cod în cazul în care vom scrie anunțurile din noua clasă), introduceți numele fișierului care urmează să fie creat în câmpul Nume și faceți clic Adăugați.

Dezvoltarea de ferestre de aplicații universale 10

Fig. 8. Caseta de dialog Add New Item

Dacă doriți să adăugați la proiect este fișierul cod, puteți face mai ușor. Există două moduri. În primul rând, făcând clic pe butonul din dreapta al mouse-ului pe „ramuri“ ale panoului listă ierarhică în soluție Explorer. care prezintă proiectul, și selectați elementul din clasa Add submeniul. În al doilea rând, pentru a alege proiectul de meniu clasa Add. În acest caz, lista fereastra deschisă Adăugați un element nou a selectat clasa element.

Codul complet Clasa CIConverter este prezentată mai jos (namespace importatoare de expresie, care sunt la începutul codului și lipite la cele mai multe Visual Studio, sunt omise din motive de concizie).

Ca o aplicație universală, creat in articol de studiu, „Dezvoltarea de Windows 10. Aplicarea cea mai universală este prima aplicație“, pentru a converti valorile listate în caseta de text (așa cum știm deja, acesta este stocat în proprietatea text ca un șir de caractere), în numărul am folosit o metoda statica Analizează clasa System.Double. Cu toate acestea, există o problemă gravă atunci când încearcă să transforme un șir de caractere, astfel încât stocarea altceva decât numere în virgulă mobilă, această metodă aruncă o excepție și se oprește executarea programului. Trebuie să eliminăm acest moment neplăcut.

De aceea, folosim metoda TryParse statică. Este nevoie de două argumente, dintre care prima - șirul convertit real, iar al doilea este de ieșire, și stochează numărul - rezultatul transformării. În cazul în care conversia este de succes, metoda returneaza true. în caz contrar - fals.

Pe această bază, este ușor de înțeles modul în care cele două metode de contact doar în scris CIConverter de clasă. Declaram un tip de fl variabilă dublă (în C # terminologia clasa System.Double, astfel desemnate) și să alocați un 0. Acum încercăm să converti enumerate în șirul de intrare câmp (după aducerea la un tip de șir, pentru că, după cum ne amintim, metoda invertor-l „introduce“ o valoare de tip System.Object) și, în cazul în care conversia a fost de succes, efectua calcule necesare și returnează rezultatul.

Rețineți că rezultatul a revenit, am converti în mod explicit la un șir de caractere prin apelarea metodei ToString. Acest lucru este de a se asigura că numărul rezultat a fost afișat pe un ecran în setările de sistem de localizare (de exemplu, într-un număr în virgulă mobilă rusesc pentru Windows va fi afișat cu o virgula ca separator zecimal).

Acum salvați proiectul și trece la fișierul cu interfață pagina de pornire XAML-cod. Vom adăuga doar noi în scris resurse de la pagina de conversie și punctul de legare la setările.

Din păcate, Visual Studio nu oferă nici instrumente pentru a lucra cu pagini de resurse și aplicații, astfel încât va trebui să introduceți codul necesar în XAML-descriere pagini interfață manual. Acest cod este prezentat mai jos; acesta trebuie să fie introdusă imediat după deschiderea .

Acest cod este plasat într-o resursă de dicționar pagini de clasa noastră CIConverter. situat în spațiul de nume XAML sub numele de locale - este un spațiu de nume de aplicații noastre - și face disponibile prin intermediul tastei „CI“.

În continuare, vă recomandăm să construiască soluția la Visual Studio a fost capabil de a „găsi“ unitatea noastră și aduceți-l în caseta de dialog, de a crea o transmisie de date cu caracter obligatoriu. Ansamblul se poate face prin selectarea Build Solution Menu Build sau prin apăsarea unei combinații de taste ++.

După această casetă de dialog Crearea unei date cu caracter obligatoriu pentru legăturile noastre derivă. Aici avem nevoie de un convertor lista drop-down. în cazul în care vom alege cheia sub care convertorul este disponibil (aceasta este cheia „CI“).

De îndată ce vom alege în convertorul listă o casetă de conversie va fi disponibil de intrare ConverterParameter. În ea valoarea argumentului opțional este stocată pentru a fi transmise și metode de Conversie ConvertBack convertor de clasă (de cont al treilea argument aceste metode, detalii descrise anterior).

În cele din urmă, salvați proiectul și rulați aplicația pentru a rula. În intrarea Centimetri câmp introduce orice număr și vom vedea ce va apărea în inches câmp de intrare; apoi zanesom orice număr din inches câmpul de intrare și a vedea cât de mult va fi în centimetri. În general, vom vedea că aplicația noastră este acum pe deplin funcțional (fig. 9).

Dezvoltarea de ferestre de aplicații universale 10

Fig. 9. Aplicarea pe deplin funcțional Bindings1


2.6.2. Cateva cuvinte despre convertorul de valoare

Trebuie spus că necesitatea unei legare două sensuri are loc rar. Mult mai des aplicată în practică într-o direcție de legare. Dacă această legare utilizează un convertor de valoare, nu este absolut necesar să se pună în aplicare conversia în direcția „inversă“.

În acest caz, corpul metodei ConvertBack pentru a plasa expresia care generează System.NotImplementedException isklyuchanie:

In front-end valorile convertorului XAML-cod este indicat de proprietățile clasei Binding Converter. Valoarea argumentului traductor suplimentar transmis (al treilea argument cont Conversia metodelor și ConvertBack) pot fi setate în proprietatea ConverterParameter; în cazul în care valoarea este interpretată ca o indicație a liniei sale în codul de interfață. În ConverterLanguage proprietate poate fi dat denumirea limbii și culturii, care vor fi transmise la convertorul metoda și ConvertBack Conversia al patrulea argument; Această valoare este specificată ca un șir de caractere.

Aici trebuie remarcat faptul că platforma UWP în sine, dacă este necesar, convertește, altele decât cele de tip siruri de caractere în șir valori. Cu toate acestea, rezultatul în acest caz, ar putea să nu fie ceea ce avem nevoie; să zicem, numărul este convertit într-un șir de caractere fără a ține cont de setările de limbă (numere reale cu virgulă sunt de ieșire cu punctul ca o zecimală), și data - un șir lung care cuprinde, de asemenea, un timp. Prin urmare, dacă doriți să se afișeze datele de pe ecran într-un format strict definit, se recomandă să utilizați un convertor de valoare corespunzătoare.

În versiunea de Windows 10, 1607 (Aniversare update) adaugă suport pentru transformarea elementelor logice ale cantităților în condiții de vizibilitate listare. Valoarea este convertit la true element de vizibil. și fals - în colaps. Această conversie este efectuată de către UWP platformei; noi nu trebuie să fie luate pentru punerea sa în aplicare nici o acțiune.

Atenție!
Caracteristica descrisă anterior nu va funcționa în versiunile anterioare de Windows 10.

2.7. legări de creare de programe

Uneori poate fi util să se stabilească obligatorii în C # programatică o serie de aplicații funcție de cod. Acest lucru poate fi util dacă doriți să snap-receptor element de la diferite surse, în funcție de anumite condiții sau de a folosi același obiect pentru completare snap elemente diferite.

Creare de legare se realizează în trei etape.

În prima etapă creează o clasă de obiecte cu caracter obligatoriu. constructorul sau nu este trecut nici un argument.

În a doua etapă prezintă parametrii stabiliți de legare: sursa de a asocia proprietatea sursă, o direcție de legare și valorile traductoarelor dacă este necesar. Acești parametri sunt setate folosind studiate proprietățile clasei de legare anterior:

  • ElementName - numele elementului sursă - ca un șir de caractere;
  • Cale - reconectării sursa element de proprietate - PropertyPath ca o clasă obiect. Numele șir de proprietate este stabilit în constructorul acestei clase numai argument;
  • Mode - direcția de legare - ca element de transfer de BindingMode;
  • valori convertor - - convertor în formă de clasa corespunzătoare a obiectului;
  • ConverterParameter - un argument suplimentar pentru valorile invertor - pot fi de orice tip;
  • ConverterLanguage - denumirea limbii și culturii - sub forma unei linii.

A treia etapă corespunde elementului receptor de legare și proprietatea sa. Pentru această metodă scop SetBinding. determină receptorul și ia două argumente:

  • proprietate de dependență - sub forma de desemnare a unei proprietăți de dependență;
  • peg - sub forma obiectului nou creat de clasa Legare.

Aici este un exemplu de creare a unui caracter obligatoriu pentru aplicația noastră în funcția de cod (presupunând că caseta de intrare - receptorul are numele txtInches):

Pentru acest cod pentru a lucra cu succes, noi, în plus față de specificarea numelui de-al doilea câmp de intrare va fi nevoie, de asemenea, pentru a elimina peg, creat anterior cu utilizarea de instrumente vizuale Visual Studio, XAML-in cod. Acest lucru se poate face prin clic pe toate același buton pătrat, care este situată în partea dreaptă a câmpului de introducere text panoul Properties. și selectarea din meniul pop-element de meniu Reset.

materiale suplimentare