Megosztás a következőn keresztül:


A WPF-adatkötés áttekintése LINQ-ről XML-re

Ez a cikk a System.Xml.Linq névtér dinamikus adatkötési funkcióit ismerteti. Ezek a funkciók adatforrásként használhatók a Windows Presentation Foundation (WPF) alkalmazások felhasználói felületi elemeihez. Ez a forgatókönyv a és System.Xml.Linq.XAttributespeciális System.Xml.Linq.XElement támaszkodik.

XAML és LINQ–XML

Az Extensible Application Markup Language (XAML) egy XML-dialektus, amelyet a Microsoft hozott létre a .NET-technológiák támogatásához. A WPF-ben a felhasználói felület elemeinek és a kapcsolódó funkcióknak, például eseményeknek és adatkötésnek a megjelenítésére szolgál. A Windows Workflow Foundationben az XAML a programstruktúra, például a programvezérlés (munkafolyamatok) megjelenítésére szolgál. Az XAML lehetővé teszi egy technológia deklaratív aspektusainak elválasztását a kapcsolódó eljárási kódtól, amely meghatározza a program személyre szabottabb viselkedését.

Az XAML és a LINQ az XML-hez kétféle módon kommunikálhat:

  • Mivel az XAML-fájlok jól formázott XML-fájlok, lekérdezhetők és kezelhetők XML-technológiák, például LINQ–XML használatával.

  • Mivel a LINQ–XML-lekérdezések adatforrást jelentenek, ezek a lekérdezések adatforrásként használhatók a WPF felhasználói felület elemeinek adatkötéséhez.

Ez a dokumentáció a második forgatókönyvet ismerteti.

Adatkötés a Windows Presentation Foundationben

A WPF-adatkötés lehetővé teszi, hogy egy felhasználói felületi elem az egyik tulajdonságát egy adatforráshoz társítsa. Erre egy egyszerű példa egy Label, amelynek szövege egy felhasználó által definiált objektumban lévő nyilvános tulajdonság értékét mutatja be. A WPF-adatkötés a következő összetevőkre támaszkodik:

Összetevő Leírás
Kötelező cél Az adatforráshoz társítandó felhasználói felületi elem. A WPF vizuális elemei a UIElement osztályból származnak.
Céltulajdonság A kötési cél függőségi tulajdonsága, amely az adatkötési forrás értékét tükrözi. A függőségi tulajdonságokat közvetlenül támogatja a DependencyObject osztály, amelyből UIElement származik.
Kötés forrása A bemutató felhasználói felületi eleméhez megadott egy vagy több érték forrásobjektuma. A WPF automatikusan támogatja a következő típusokat kötésforrásként: CLR-objektumok, ADO.NET adatobjektumok, XML-adatok (XPath- vagy LINQ-lekérdezésektől XML-lekérdezésekig) vagy egy másik DependencyObject.
Forrás elérési útja A kötési forrás azon tulajdonsága, amely a kötendő értékre vagy értékek készletére lesz feloldva.

A függőségi tulajdonság a WPF-hez tartozó fogalom, amely egy felhasználói felületi elem dinamikusan kiszámított tulajdonságát jelöli. A függőségi tulajdonságok például gyakran rendelkeznek a szülőelem által megadott alapértelmezett értékekkel vagy értékekkel. Ezeket a speciális tulajdonságokat a DependencyProperty osztály példányai támogatják (nem pedig mezők, mint a szokásos tulajdonságok esetében). További információ: Függőség tulajdonságainak áttekintése.

Dinamikus adatkötés a WPF-ben

Alapértelmezés szerint az adatkötés csak a cél felhasználói felületi elem inicializálásakor történik. Ezt egyszeri kötésnek nevezzük. A legtöbb esetben ez nem elegendő; Az adatkötési megoldás általában megköveteli a módosítások futásidőben történő dinamikus propagálását az alábbiak egyikével:

  • Egyirányú kötés automatikusan propagálja a módosításokat az egyik oldalon. A forrás változásai leggyakrabban a célban jelennek meg, de a fordított érték néha hasznos lehet.

  • kétirányú kötésben a forrás módosításai automatikusan propagálásra kerülnek a célra, és a cél módosításai automatikusan propagálásra kerülnek a forrásra.

Az egyirányú vagy kétirányú kötéshez a forrásnak változásértesítési mechanizmust kell implementálnia, például a INotifyPropertyChanged felület implementálásával, vagy egy PropertyNameChanged mintával minden támogatott tulajdonsághoz.

További információ a WPF adatkötéséről: Adatkötés (WPF).

Dinamikus tulajdonságok a LINQ-ból XML-osztályokba

A LEGTÖBB LINQ-XML-osztály nem megfelelő WPF dinamikus adatforrásnak minősül. Néhány hasznos információ csak metódusokkal érhető el, tulajdonságok helyett, és ezekben az osztályokban a tulajdonságok nem implementálják a változásértesítéseket. A WPF-adatkötés támogatásához a LINQ to XML dinamikus tulajdonságokat tesz elérhetővé.

Ezek a dinamikus tulajdonságok olyan speciális futásidejű tulajdonságok, amelyek a XAttribute és XElement osztályokban meglévő metódusok és tulajdonságok funkcióit duplikálják. Ezek az osztályok csak azért lettek hozzáadva ezekhez az osztályokhoz, hogy dinamikus adatforrásként működjenek a WPF-hez. Ennek az igénynek a kielégítése érdekében ezek a dinamikus tulajdonságok változásértesítéseket implementálnak. Ezekről a dinamikus tulajdonságokról részletes útmutatást talál a következő szakaszban, LINQ az XML dinamikus tulajdonságai.

Megjegyzés:

A System.Xml.Linq névtér különböző osztályaiban található szabványos nyilvános tulajdonságok közül számos használható egyszeri adatkötéshez. Ne feledje azonban, hogy sem a forrás, sem a cél nem lesz dinamikusan frissítve ebben a sémában.

Dinamikus tulajdonságok elérése

A XAttribute és XElement osztályok dinamikus tulajdonságai nem érhetők el, mint a standard tulajdonságok. A CLR-kompatibilis nyelvekben, például a C#-ban például nem lehetnek:

  • Közvetlenül a fordítás idején érhető el. A dinamikus tulajdonságok láthatatlanok a fordító és a Visual Studio IntelliSense számára.

  • Futásidőben felderíthető vagy elérhető .NET-reflexió használatával. Még futásidőben sem tekinthetők tulajdonságoknak az alapvető CLR-értelemben.

C#-ban a dinamikus tulajdonságok csak futásidőben érhetők el a System.ComponentModel névtér által biztosított létesítményeken keresztül.

Ezzel szemben az XML-forrásban a dinamikus tulajdonságok egy egyszerű jelöléssel érhetők el az alábbi formában:

<object>.<dynamic-property>

A két osztály dinamikus tulajdonságai vagy egy közvetlenül használható értékre, vagy egy indexelőre lesznek feloldva, amelyet indexkel kell ellátni az eredményül kapott érték vagy értékgyűjtemény beszerzéséhez. Az utóbbi szintaxis a következő formában történik:

<object>.<dynamic-property>[<index-value>]

További információ: LINQ–XML dinamikus tulajdonságok.

A WPF dinamikus kötésének implementálásához a dinamikus tulajdonságok a System.Windows.Data névtér által biztosított létesítményeket használják, különösen a Binding osztályt.

Lásd még