Rezumat: Proprietățile de dependență și evenimentele direcționate sunt obiecte noi în tehnologia WPF care oferă caracteristici precum animație, legare de date și stiluri. Utilizarea proprietăților de dependență vă permite să urmăriți modificările lor la diferite nivele ale ierarhiei elementelor aplicației. Un eveniment rutinat poate apărea într-un singur element, dar poate fi procesat în alte elemente, în creștere sau în cădere în ierarhia elementelor arborelui de vizualizare. Legarea datelor vă permite să asociați controalele și elementele de interfață cu datele utilizând proprietățile de dependență. În procesul de legare a datelor, ele pot fi convertite și verificate.
Obțineți cunoștințe inițiale despre proprietățile dependențelor și evenimentele rutate, cum să le definiți, să le creați și să le utilizați. Aflați scopul și capabilitățile legării datelor în aplicație, conversia și verificarea acestora în timpul procesului de introducere.
Proprietăți de dependență și evenimente rotative
Tehnologia WPF definește proprietățile de dependență. care sunt elemente de un nivel mai ridicat de funcționalitate în comparație cu proprietățile uzuale ale Microsoft. NET [4]. [8]. Proprietățile de dependență oferă posibilitatea de a lucra cu unelte de bază WPF, cum ar fi animația. legare de date și stiluri. Majoritatea proprietăților pe care elementele WPF le au sunt proprietățile de dependență. Ele pot fi considerate proprietăți obișnuite. Net. dar au un set suplimentar de caracteristici WPF. Conceptual, comportamentul proprietăților dependențelor nu diferă de comportamentul proprietăților obișnuite, dar la un nivel mai scăzut de reprezentare există o implementare diferită. Proprietățile de dependență consumă memorie în mod eficient și acceptă astfel de caracteristici de nivel înalt, precum notificarea schimbărilor și moștenirea valorilor proprietății. În plus, evenimentele rutate sunt introduse în WPF. care sunt mai puternice decât evenimentele obișnuite. NET. Evenimentele direcționate se pot deplasa prin arborele elementului (coborâți și urcând) și permit procesarea evenimentului într-un element atunci când apare într-un alt element.
Proprietăți de dependență
Când creați o proprietate de dependență, trebuie să definiți o instanță a clasei DependencyProperty. care trebuie să fie statică și numai pentru citire. Să presupunem că în clasa NodeImage trebuie să definiți proprietatea Fill. care va descrie pensula pentru a umple orice obiecte grafice.
În conformitate cu regulile de denumire a proprietăților dependențelor, numele proprietății declarate trebuie să fie formată din două părți - numele, în cazul nostru, Umplere. și cuvântul Proprietate. care este FillProperty. înseamnă modificator readonly care au creat o proprietate de dependență FillProperty este numai pentru citire și poate obține numai valoarea constructorului static al clasei care conține acest domeniu, care este, în cazul nostru - NodeImage constructorului clasei. Proprietatea de dependență declarată trebuie înregistrată în WPF, care se realizează în constructorul static al clasei corespunzătoare.
În constructor, metadatele metadate, un obiect al clasei FrameworkPropertyMetadata, sunt create mai întâi pentru a înregistra proprietatea de dependență. Proprietăți metadate FillProperty Se valoarea implicită (nulă) și necesitatea de a redesena obiect schimbarea proprietăților sale (AffectsRender = true). Înregistrarea se face folosind metoda DependencyProperty.Register (). pentru care parametrii dat numele de proprietate (umplere), tipul acestuia (typeof (Brush)), un tip de obiect, în care proprietatea este înregistrată (typeof (NodeImage)) și metadate (metadate). În general, când înregistrați o proprietate de dependență, puteți specifica opțional o metodă de apel invers care va verifica dacă proprietățile sunt corecte.
Pentru a oferi acces la proprietățile dependenței, trebuie să declarați proprietatea Completare. adică înfășurați-o în shell-ul proprietăților obișnuite, utilizând metodele SetValue () și GetValue ().
Proprietatea dependentă de dependență de umplere poate fi utilizată în codul clasei NodeImage ca proprietate normală.
Unele clase pot împărți aceeași proprietate de dependență, chiar dacă au ierarhii de clase separate.
O varietate de proprietăți de dependență sunt proprietățile de dependență atașabile. Aceste proprietăți se aplică unei clase diferite de cea în care este definită. Pentru a înregistra proprietatea de dependență atașată, utilizați metoda RegisterAttached (). Împachetarea acestei proprietăți nu este necesară
Proprietățile de dependență susțin notificarea modificărilor și rezoluția dinamică a valorilor.
Când modificați valorile proprietății de dependență, se face un apel invers, care este responsabil pentru actualizarea legărilor de date și declanșarea declanșatorilor. Din aceasta rezultă că pentru a menține funcționalitatea specificată atunci când modificați proprietățile dependenței, trebuie să creați o legătură care să utilizeze valoarea proprietății sau să scrie un declanșator care va schimba automat o altă proprietate sau va efectua alte acțiuni.
Rezoluția dinamică a valorilor proprietăților de dependență determină mecanismul de extragere a valorilor din proprietățile de dependență. La recuperarea valorilor din proprietăți, sistemul WPF determină valoarea de bază, luând în considerare următorii factori:
- valoarea implicită;
- mostenit;
- valoare din stil tematic;
- valoare din stilul proiectului;
- valoare locală.
Cea mai mare prioritate are o valoare locală dacă este setată în program. Dacă nu este specificată nicio valoare locală, setarea valorii este trecută de lista la elementul următor care o poate accepta, până la valoarea implicită.
Evenimente trase
Un eveniment rutat este un mesaj de eveniment care a apărut într-un singur element, iar generația poate apărea într-un alt element. Un eveniment rutinat este reprezentat de un câmp static. care este doar pentru citire, care este înregistrată în constructor și este împachetată cu o definiție de eveniment standard .NET.
De exemplu, pentru clasa NodeImage, trebuie să definiți evenimentul Routed DeleteNode. Pentru a face acest lucru, vom crea o instanță statică a clasei RoutedEvent. care este declarată cu modificatorul readonly. Postfixul evenimentului ar trebui să adauge numele evenimentului.
Înregistrarea unui eveniment rutinat trebuie efectuată în constructorul de clasă statică folosind metoda RegisterRoutedEvent.
Atunci când înregistrarea este dat numele evenimentului (DeleteNode), tipul traseului (RoutingStrategy.Bubble), un delegat care definește sintaxa handler evenimentului (în acest caz, RoutedEventHandler) și clasa căreia îi aparține evenimentul (NodeImage).
Event wrapper-ul definește metode pentru adăugarea și eliminarea ascultătorilor de evenimente: AddHandler () și RemoveHandler ().
Clasa în care este creat evenimentul rutat trebuie să fie responsabil pentru generarea acestuia. În clasa NodeImage, există un element (itemDelete) din meniul contextual care este responsabil pentru generarea evenimentului DeleteNodeEvent.
În managerul ContextMenu_OnClick (), este creată o instanță (argsEvent) din clasa RoutedEventArgs. care conține informații de stare și date despre evenimente asociate unui eveniment rutat.
Când se încarcă date din baza de date, apare un mesaj InvalidOperationException cu mesajul: Elementul de colectare trebuie să fie gol înainte de a utiliza ItemsSource. Știu că puteți utiliza colecțiile Items sau Items pentru a popula DataGrid, dar nu le puteți folosi în același timp: dacă setați o valoare pentru proprietatea ItemsSource și adăugați un element la elementele din C #, se produce o excepție.
Întrebarea este cum să urmăriți și să dezactivați adăugarea unui element la Elemente?
În cea de-a cincea conferință de pe pagina a doua, eroarea din linie apare în compilator:
ObjectQuery
Nu se poate converti implicit tipul "System.Data.Entity.DbSet"
în a folosi totul așa cum ar trebui, aici se pare ca cu conversia tipurilor de probleme