Wpf, ugrás az objektumokra

Amikor egy olyan elemhez kötődik, amely nem elem, akkor el kell hagynia a Binding.ElementName tulajdonságot, és helyettesítenie kell az alábbi tulajdonságok egyikét:

Jelzi a RelativeSource objektumot használó forrásobjektumot, amely lehetővé teszi az aktuális elem hivatkozását. Ez egy speciális eszköz, amely alkalmas vezérlő sablonok és adat sablonok írására.

Ha a forrást a Forrás tulajdonság vagy a Relatív forrás tulajdonság nem adja meg, akkor a WPF környezet elemzi az elemfát az aktuális elemtől kezdődően. Ellenőrzi az egyes elemek DataContext tulajdonságát, és az elsőt használja, amely nem nulla. A DataContext tulajdonság rendkívül hasznos, ha egy objektum több tulajdonságát meg kell kötni a különböző elemekhez, mivel egy magas szintű konténerobjektum DataContext tulajdonságát állíthatja be, nem pedig közvetlenül a célelemre.

Az alábbiakban részletesebben ismertetjük ezeket a lehetőségeket.

A Forrás tulajdonság

A Forrás tulajdonság egyszerű. Az egyetlen olyan szempont, amelyet figyelembe kell venni, hogy az adat objektumot kötelezővé kell tenni a kötéshez. Ahogyan az látható, számos megközelítés létezik egy adatobjektum megszerzéséhez: kivonni egy erőforrásból, programilag létrehozni vagy letölteni egy adatszolgáltatótól.

A legegyszerűbb megoldás a forrás telepítése néhány kész és hozzáférhető statikus objektumba. Például létrehozhat egy statikus objektumot a kódban, és használhatja. Alternatív megoldásként alkalmazhatja az összetevőt a .NET osztálykönyvtárból, az alábbiak szerint:

Ez a kötelező kifejezés egy FontFamily objektumot kap, amelyet a SystemFonts.IconFontFamily tulajdonság biztosít. (Vegye figyelembe, hogy a Binding.Source tulajdonság telepítése a Static Markup Extension segítségével szükséges.) Ezután a Binding.Path tulajdonság a FontFamily.Source tulajdonságra van állítva, amely megadja a betűtípus családnevét. Az eredmény egyetlen szövegsor. Windows Vista vagy Windows 7 esetén a betűtípus neve Segoe UI.

Egy másik lehetőség az előzőleg erőforrásként létrehozott objektumhoz való kötődés. Például a következő jelölés létrehoz egy FontFamily objektumot, amely a Calibri betűtípushoz utal:

Relatív forrás tulajdonság

A RelativeSource tulajdonság lehetővé teszi a forrásobjektumnak a célobjektumhoz való viszonya alapján történő beállítását. Például a RelativeSource tulajdonságot arra használhatja, hogy egy elemet magához köti, vagy egy olyan szülőelemhez köthessen, amely ismeretlen számú, az elemfán magasabb szinttel rendelkezik.

A Binding.RelativeSource tulajdonság beállításához használja a RelativeSource objektumot. Ez némileg bonyolítja a szintaxist, mivel létre kell hoznia egy kötő objektumot és belsejében egy beágyazott relatív forrás objektumot. Az egyik lehetőség az, hogy az Objektum beállítás szintaxist használja a Kötés jelölő kiterjesztése helyett.

Például a következő kód létrehoz egy Kötvény objektumot a TextBlock.Text tulajdonsághoz. A Binding objektum a RelativeSource-ot használja, amely a szülőablakot keresi és megjeleníti az ablak címét:

A RelativeSource objektum esetében a FindAncestor mód van kiválasztva, ami arra készteti, hogy felkeresse az elemfát, amíg az AncestorType tulajdonság által meghatározott elemtípus nem található meg.

A kötés legáltalánosabb módja az, hogy azt egy sorban egyesítsük, a Binding és RelativeSource jelölőbővítmények használatával, az alábbiak szerint:

A FindAncestor mód egy lehetséges opció közül az egyik a RelativeSource objektum létrehozásakor. Minden lehetőséget röviden ismertetünk:

Egy kifejezés egy adott elem másik tulajdonságára van kötve

A kifejezés a szülőelemhez van kötve. A WPF felkutatja az elemfát, amíg meg nem találja a kívánt szülőelemet. A szülő megadásához meg kell adni az AncestorType tulajdonságot is, hogy jelezze a talált szülőelem típusát. Ezenkívül az AncestorLevel tulajdonság használatával kihagyhat bizonyos számú egyezést a megadott elemhez. Például, hogy kötődnek a harmadik elem ListBoxItem típusú míg felkapaszkodott a fára, meg kell telepíteni és AncestorType = AncestorLevel = 3, tehát hiányzik az első két ListBoxItem. Alapértelmezés szerint az AncestorLevel 1, és a keresés az első talált elemen megáll.

A kifejezés az adathoz kötött listán az előző adatelemhez kötődik. Ezt egy listaelemben lehet használni

A kifejezés az elemhez kötődik, amelyre a sablont alkalmazzák. Ez az üzemmód csak akkor működik, ha a kötés egy vezérlő sablon vagy egy adat sablon belsejében van

Első pillantásra a RelativeSource tulajdonság úgy tűnhet, hogy a jelölés felesleges szövődménye. Végül is, miért nem csak közvetlenül a szükséges forráshoz kell csatolnia a Forrás tulajdonság vagy az ElementName tulajdonság használatával? Ez azonban nem mindig lehetséges, és általában azért, mert a forrásobjektum és a célobjektum a jelölés különböző részein található. Ez az eredmény vezérlő sablonok és adatsablonok létrehozásakor. Például, amikor olyan adatbázist hoz létre, amely megváltoztatja az elemek megjelenítésének módját a listában, előfordulhat, hogy hozzá kell férnie a legfelső szintű ListBox-objektumhoz, hogy olvassa el néhány tulajdonságát.

DataContext tulajdonság

Bizonyos esetekben sok elem kapcsolódik egy objektumhoz. Például vegye figyelembe a következő csoportot a TextBlock elemek közül, amelyek mindegyike az eredeti kötési kifejezést használja a különböző fontok betöltésére, az alapértelmezett ikonokra, beleértve az első fülhallgató sorát, stílusát és súlyát (mindkettő csak a rendszeres). Használhatja a Forrás tulajdonságot mindegyikhez, de ez elég hosszú jelölést eredményez:

Ilyen helyzetben a FrameworkElement.DataContext tulajdonság használatával egyértelműbb és kényelmesebb lenne meghatározni a kötés forrását. Ebben a példában érdemes beállítani a StackPanel elem DataContext tulajdonságát, amely tartalmazza az összes TextBlock elemet. (A DataContext tulajdonságot még magasabb szintre is beállíthatja, például a teljes ablak szintjén, de jobb, ha a lehető legszorosabban meghatározná a szándékokat.)

Egy elem DataContext tulajdonságát ugyanúgy állíthatja be, mint a Binding.Source tulajdonság beállítva. Más szóval, beágyazhat egy objektumot, kiválaszthatja azt egy statikus tulajdonságból, vagy letöltheti azt egy erőforrásból, az alábbiak szerint:

Ezután a kötődési kifejezéseket egyszerűsítik, kizárva néhány információt a forrásról:

Ha nincs forrás információ a kötési kifejezésben, akkor a WPF ellenőrzi az elem DataContext tulajdonságát. Ha ez nulla, akkor a WPF az elemek fájljában az elsõ adatkonfliktuson kívül jelenik meg. (Kezdetben az összes elem DataContext tulajdonságai nulláznak.) Ha megfelelő adatkontaktust észlel, akkor a kötéshez használják. Ha nem, akkor a kötési kifejezés nem ad át semmilyen értéket a cél tulajdonságnak.

Kapcsolódó cikkek