Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Jegyzet Az adatkötés alkalmazásbeli {x:Bind} használatával kapcsolatos általános információkért (és a {x:Bind} és a {Binding} közötti teljes összehasonlításért tekintse meg az adatkötés részletes ismertetését.
A (Windows 10-hez új) {x:Bind} jelölőbővítmény a {Binding} alternatíva. A(z) {x:Bind} kevesebb idő alatt és kevesebb memóriával fut, mint a {Binding} , és támogatja a jobb hibakeresést.
XAML fordítási időben a(z) {x:Bind} kóddá alakul, amely értéket kér le egy adatforrás tulajdonságából, és beállítja a jelölőben megadott tulajdonságra. A kötésobjektum igény szerint konfigurálható úgy, hogy megfigyelje az adatforrástulajdonság értékének változásait, és a módosítások (Mode="OneWay") alapján frissítse magát. Konfigurálható úgy is, hogy a saját értékében lévő módosításokat visszaküldje a forrástulajdonságba (Mode="TwoWay").
A(z) {x:Bind} és {Binding} által létrehozott kötésobjektumok funkcionálisan egyenértékűek. A(z) {x:Bind} azonban speciális célú kódot hajt végre, amelyet fordítási időben hoz létre, a {Binding} pedig általános célú futtatókörnyezeti objektumvizsgálatot használ. Ennek következtében az {x:Bind} kötések (más néven lefordított kötések) nagy teljesítménnyel rendelkeznek, fordítási idő alapján ellenőrzik a kötési kifejezéseket, és támogatják a hibakeresést azáltal, hogy lehetővé teszik töréspontok beállítását a lap részleges osztályaként létrehozott kódfájlokban. Ezek a fájlok a mappában obj találhatók, például (C#) <view name>.g.csnéven.
Jótanács
A(z) {x:Bind} a OneTime alapértelmezett módjával rendelkezik, ellentétben a {Binding} móddal, amely a OneWay alapértelmezett módjával rendelkezik. Ez teljesítménybeli okokból lett kiválasztva, mivel a OneWay használatával több kód jön létre a változásészlelés összekapcsolásához és kezeléséhez. Explicit módon megadhat egy módot a OneWay- vagy a TwoWay-kötés használatára. Az x:DefaultBindMode használatával is módosíthatja a {x:Bind} alapértelmezett módját a korrektúrafa egy adott szegmenséhez. A meghatározott mód az adott elemen és annak gyermekein lévő {x:Bind} kifejezésekre vonatkozik, amelyek a kötés részeként nem határoznak meg egyértelműen módot.
XAML-attribútumok használata
<object property="{x:Bind}" .../>
-or-
<object property="{x:Bind propertyPath}" .../>
-or-
<object property="{x:Bind bindingProperties}" .../>
-or-
<object property="{x:Bind propertyPath, bindingProperties}" .../>
-or-
<object property="{x:Bind pathToFunction.functionName(functionParameter1, functionParameter2, ...), bindingProperties}" .../>
| Időszak | Description |
|---|---|
| propertyPath | A kötés tulajdonságútvonalát meghatározó sztring. További információ az alábbi Tulajdonságútvonal szakaszban található. |
| bindingProperties | |
| propName=érték[, propName=érték]* | Egy vagy több, név/érték pár szintaxisával megadott kötési tulajdonság. |
| propName | A kötésobjektumon beállítani kívánt tulajdonság sztringneve. Például: "Konverter". |
| value | A tulajdonság beállításának értéke. Az argumentum szintaxisa a beállított tulajdonságtól függ. Íme egy példa a propName=érték használatára, ahol az érték maga egy korrektúrakiterjesztés: Converter={StaticResource myConverterClass}. További információ: Tulajdonságok, amelyeket az alábbi {x:Bind} szakaszsal állíthat be . |
Példák
<Page x:Class="QuizGame.View.HostView" ... >
<Button Content="{x:Bind Path=ViewModel.NextButtonText, Mode=OneWay}" ... />
</Page>
Ez a példa az XAML egy ListView.ItemTemplate tulajdonsággal rendelkező {x:Bind} tulajdonságot használ. Jegyezze fel az x:DataType érték deklarációját.
<DataTemplate x:Key="SimpleItemTemplate" x:DataType="data:SampleDataGroup">
<StackPanel Orientation="Vertical" Height="50">
<TextBlock Text="{x:Bind Title}"/>
<TextBlock Text="{x:Bind Description}"/>
</StackPanel>
</DataTemplate>
Tulajdonság elérési útja
A PropertyPath egy {x:Bind} kifejezés elérési útját állítja be.
Az elérési út egy tulajdonság elérési útja, amely annak a tulajdonságnak, altulajdonságnak, mezőnek vagy metódusnak az értékét adja meg, amelyhez (a forráshoz) kötődik. Az Elérési út tulajdonság neve kifejezetten megemlíthető: {x:Bind Path=...}. Vagy kihagyhatja: {x:Bind ...}.
Tulajdonság elérési útjának feloldás
A(z) {x:Bind} nem a DataContextet használja alapértelmezett forrásként, hanem magát a lapot vagy a felhasználói vezérlőt használja. A tulajdonságok, mezők és metódusok tehát a lap vagy a felhasználó vezérlőelem mögötti kódban jelennek meg. Ha a nézetmodellt a(z) {x:Bind} számára szeretné elérhetővé tenni, általában új mezőket vagy tulajdonságokat szeretne hozzáadni az oldal vagy a felhasználói vezérlő mögötti kódhoz. A tulajdonságútvonalak lépéseit pontokkal (.) tagolják, és több elválasztójelet is megadhat az egymást követő altulajdonságok közötti mozgáshoz. Használja a ponthatárolást, függetlenül attól, hogy milyen programozási nyelvre van szükség ahhoz az objektumhoz, amelyhez hozzá van kötve.
Például: egy lapon a Text="{x:Bind Employee.FirstName}" kifejezés egy alkalmazottat keres a lapon, majd egy FirstName tagot az alkalmazott által visszaadott objektumon. Ha egy elemvezérlőt egy olyan tulajdonsághoz köt, amely egy alkalmazott függőit tartalmazza, a tulajdonság elérési útja lehet "Employee.Depends", és az elemvezérlő elemsablonja gondoskodik az elemek "Függők" elemének megjelenítéséről.
C++/CX esetén a(z) {x:Bind} nem tud kapcsolódni a lap vagy adatmodell magánmezőihez és tulajdonságaihoz – a kötéshez nyilvános tulajdonsággal kell rendelkeznie. A kötés felületét CX-osztályokként/interfészekként kell elérhetővé tenni, hogy megkaphassuk a megfelelő metaadatokat. A [Bindable] attribútumra nincs szükség.
Az x:Kötés esetén nem kell az ElementName=xxx elemet használnia a kötési kifejezés részeként. Ehelyett használhatja az elem nevét a kötés elérési útjának első részeként, mivel az elnevezett elemek a gyökérkötés forrását képviselő lapon vagy felhasználói vezérlőben lévő mezőkké válnak.
Collections
Ha az adatforrás gyűjtemény, akkor a tulajdonság elérési útja a gyűjtemény elemeit a helyük vagy az indexük alapján határozhatja meg. Például: "Teams[0]. Players", ahol a "[]" szó a "0" szót tartalmazza, amely egy nulla indexelt gyűjtemény első elemét kéri le.
Az indexelő használatához a modellnek IList<T-t> vagy IVector<T-t> kell implementálnia az indexelni kívánt tulajdonság típusán. (Vegye figyelembe, hogy az IReadOnlyList<A T> és az IVectorView<T> nem támogatja az indexelő szintaxisát.) Ha az indexelt tulajdonság típusa támogatja az INotifyCollectionChanged vagy az IObservableVector protokollt, és a kötés OneWay vagy TwoWay, akkor regisztrálja és figyeli a változásértesítéseket ezeken a felületeken. A változásészlelési logika az összes gyűjteménymódosítás alapján frissül, még akkor is, ha ez nem befolyásolja az adott indexelt értéket. Ennek az az oka, hogy a figyelési logika közös a gyűjtemény minden példányában.
Ha az adatforrás szótár vagy térkép, akkor a tulajdonság elérési útja a sztringnév alapján adhat meg elemeket a gyűjteményben. Például <TextBlock Text="{x:Bind Players['John Smith"}" /> a "John Smith" nevű szótárban keres egy elemet.\n'] A nevet idézőjelek közé kell tenni, és egy vagy két idézőjel is használható. A hat (^) sztringekben lévő idézőjelek feloldására használható. Általában a legegyszerűbb alternatív idézőjeleket használni az XAML attribútumhoz használt idézőjelekből. (Vegye figyelembe, hogy az IReadOnlyDictionary<A T> és az IMapView<T> nem támogatja az indexelő szintaxisát.)
A láncindexelő használatához a modellnek meg kell valósítania az IDictionary<String, T> vagy az IMap<String, T> interfészt az indexelni kívánt tulajdonság típusán. Ha az indexelt tulajdonság típusa támogatja az IObservableMap-ot , és a kötés OneWay vagy TwoWay, akkor regisztrálja és figyeli a változásértesítéseket ezeken a felületeken. A változásészlelési logika az összes gyűjteménymódosítás alapján frissül, még akkor is, ha ez nem befolyásolja az adott indexelt értéket. Ennek az az oka, hogy a figyelési algoritmus a gyűjtemény összes példányában közös.
Csatolt tulajdonságok
A csatolt tulajdonságokhoz való kötéshez zárójelbe kell helyeznie az osztály és a tulajdonság nevét a pont után. Például Text="{x:Bind Button22.(Grid.Row)}". Ha a tulajdonság nem Xaml-névtérben van deklarálva, akkor előtaggal kell ellátnia egy XML-névteret, amelyet le kell képeznie egy kódnévtérre a dokumentum elején.
Szereplőválogatás
A fordított lekötések erősen típusosak, és meghatározzák az útvonal minden lépésének a típusát. Ha a visszaadott típus nem rendelkezik tagként, fordításkor sikertelen lesz. Megadhatja az objektum valódi típusának kötésére vonatkozó öntött értéket.
A következő esetben az obj egy objektum típusú tulajdonság, de tartalmaz egy szövegdobozt, így használhatjuk a Text="{x:Bind ((TextBox)obj).Text}" vagy Text="{x:Bind obj.(TextBox.Text)}" parancsokat.
A groups3 mező a Text="{x:Bind ((data:SampleDataGroup)groups3[0]).Title}" szótáraként van definiálva, ezért azt a data:SampleDataGroup típusra kell áttípusosítania. Figyelje meg az xml-adatok használatát: a névtér előtagja az objektumtípus olyan kódnévtérre való leképezéséhez, amely nem része az alapértelmezett XAML-névtérnek.
Megjegyzés: A C#-stílusú öntött szintaxis rugalmasabb, mint a csatolt tulajdonságszintaxis, és ez az ajánlott szintaxis.
Útvonalmentes öntés
A natív kötéselemző nem biztosít függvényparaméterként ábrázolható this kulcsszót, de támogatja az elérési út nélküli öntést (például {x:Bind (x:String)}), amely függvényparaméterként használható.
{x:Bind MethodName((namespace:TypeOfThis))} Ezért érvényes módszer a fogalmilag egyenértékű műveletek végrehajtására{x:Bind MethodName(this)}.
Példa:
Text="{x:Bind local:MainPage.GenerateSongTitle((local:SongItem))}"
<Page
x:Class="AppSample.MainPage"
...
xmlns:local="using:AppSample">
<Grid>
<ListView ItemsSource="{x:Bind Songs}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:SongItem">
<TextBlock
Margin="12"
FontSize="40"
Text="{x:Bind local:MainPage.GenerateSongTitle((local:SongItem))}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
namespace AppSample
{
public class SongItem
{
public string TrackName { get; private set; }
public string ArtistName { get; private set; }
public SongItem(string trackName, string artistName)
{
ArtistName = artistName;
TrackName = trackName;
}
}
public sealed partial class MainPage : Page
{
public List<SongItem> Songs { get; }
public MainPage()
{
Songs = new List<SongItem>()
{
new SongItem("Track 1", "Artist 1"),
new SongItem("Track 2", "Artist 2"),
new SongItem("Track 3", "Artist 3")
};
this.InitializeComponent();
}
public static string GenerateSongTitle(SongItem song)
{
return $"{song.TrackName} - {song.ArtistName}";
}
}
}
Függvények a kötési útvonalakban
A Windows 10 1607-es verziójától kezdve az {x:Bind} támogatja a függvény használatát a kötési útvonal levéllépéseként. Ez egy hatékony adatkötési funkció, amely több forgatókönyvet is lehetővé tesz a korrektúrában. Részletekért tekintse meg a függvénykötéseket .
Eseménykötés
Az eseménykötés a lefordított kötés egyedi funkciója. Lehetővé teszi egy esemény kezelőjének megadását kötéssel, nem pedig a mögöttes kód egyik metódusának kell lennie. Például: Click="{x:Bind rootFrame.GoForward}".
Események esetén a célmetódus nem lehet túlterhelve, és a következőket is meg kell tennie:
- Egyezzen meg az esemény aláírásával.
- VAGY nincsenek paraméterek.
- VAGY az eseményparaméterek típusaiból hozzárendelhető típusok azonos számú paraméterével rendelkezik.
A létrehozott kód mögötti, lefordított kötés kezeli az eseményt, és a modell metódusához irányítja, kiértékelve a kötési kifejezés elérési útját az esemény bekövetkezésekor. Ez azt jelenti, hogy a tulajdonságkötésekkel ellentétben nem követi nyomon a modell módosításait.
A tulajdonság elérési útjának sztringszintaxisával kapcsolatos további információkért tekintse meg a Tulajdonság-elérési út szintaxist, és tartsa szem előtt a(z) {x:Bind} esetében itt ismertetett különbségeket.
A(z) {x:Bind} használatával beállítható tulajdonságok
A(z) {x:Bind} a bindingProperties helyőrző szintaxissal van illusztrálva, mivel a korrektúrakiterjesztésben több olvasási/írási tulajdonság állítható be. A tulajdonságok bármilyen sorrendben beállíthatók vesszővel tagolt propName=értékpárokkal . Vegye figyelembe, hogy a kötési kifejezésben nem szerepelhet sortörés. Egyes tulajdonságokhoz olyan típusok szükségesek, amelyek nem rendelkeznek típuskonverzióval, ezért ezekhez saját, a(z) {x:Bind} fájlba ágyazott korrektúrakiterjesztésekre van szükség.
Ezek a tulajdonságok ugyanúgy működnek, mint a Kötés osztály tulajdonságai.
| Ingatlan | Description |
|---|---|
| Path | Lásd a fenti Tulajdonságút szakaszt . |
| Konverter | A kötési motor által meghívott konverterobjektumot adja meg. A konverter XAML-ben állítható be, de csak akkor, ha egy {StaticResource} jelölőkiterjesztésben hozzárendelt objektumpéldányra hivatkozik az erőforrásszótárban. |
| ConverterLanguage | A konverter által használandó kultúrát adja meg. (Ha a ConverterLanguage beállítást használja, akkor a Convertert is be kell állítania.) A kultúra szabványalapú azonosítóként van beállítva. További információ: ConverterLanguage. |
| ConverterParameter | Megadja a konverterlogikában használható konverterparamétert. (Ha a ConverterParametert állítja be, akkor a Convertert is be kell állítania.) A legtöbb konverter egyszerű logikát használ, amely lekér minden szükséges információt az átadott értékről az átalakításhoz, és nincs szükség ConverterParameter-értékre . A ConverterParameter paraméter olyan közepesen fejlett konverter-implementációkhoz készült, amelyek több logikával rendelkeznek, amelyek a ConverterParameterben átadott elemeket leküldik. Írhat olyan konvertert, amely nem sztringeket használ, de ez nem gyakori. További információt a ConverterParameter megjegyzései című témakörben talál. |
| FallbackValue | Olyan értéket ad meg, amely akkor jelenik meg, ha a forrás vagy az elérési út nem oldható fel. |
| Mode | A kötési módot a következő karakterláncok egyikeként adja meg: "OneTime", "OneWay" vagy "TwoWay". Az alapértelmezett érték a "OneTime". Vegye figyelembe, hogy ez eltér a {Binding} alapértelmezett értékétől, amely a legtöbb esetben "OneWay". |
| TargetNullValue | A forrásérték feloldásakor megjelenítendő értéket ad meg, de explicit módon null értékű. |
| BindBack | Megadja a függvényt, amelyet a kétirányú kötés fordított irányához kell használni. |
| UpdateSourceTrigger | Megadja, hogy mikor kell a módosításokat visszaküldni a vezérlőből a modellbe a TwoWay-kötésekben. A TextBox.Text kivételével az összes tulajdonság alapértelmezett értéke PropertyChanged; a TextBox.Text alapértelmezett értéke LostFocus. |
Megjegyzés:
Ha {Binding} értékről {x:Bind} értékre konvertálja a korrektúrát, vegye figyelembe a Mód tulajdonság alapértelmezett értékeinek különbségeit. x:DefaultBindMode használatával módosíthatja az x:Kötés alapértelmezett módját a korrektúrafa egy adott szegmenséhez. A kiválasztott mód az x:Bind kifejezéseket alkalmazza az adott elemre és annak gyermekeire, amelyek nem határoznak meg explicit módot a kötés részeként. A OneTime nagyobb teljesítményű, mint a OneWay, mivel a OneWay használatával több kód jön létre a változásészlelés összekapcsolásához és kezeléséhez.
Megjegyzések
Mivel a(z) {x:Bind} generált kódot használ az előnyei eléréséhez, fordításkor típusinformációra van szükség. Ez azt jelenti, hogy nem köthet olyan tulajdonságokhoz, amelyeknél nem ismeri előre a típust. Emiatt a(z) {x:Bind} nem használható az Objektum típusú DataContext tulajdonsággal, és futásidőben is változhat.
Amikor {x:Bind}-et használ adatsablonokkal, az adott típus megjelöléséhez a x:DataType értéket kell beállítania, ahogy az a Példák szakaszban látható. A típust egy interfész- vagy alaposztálytípusra is beállíthatja, majd szükség esetén típuskonverziókat használhat, hogy a teljes kifejezést megadja.
A lefordított kötések a kódgenerálástól függenek. Ha tehát {x:Bind} értéket használ egy erőforrás-szótárban, akkor az erőforrás-szótárnak kód mögötti osztályt kell használnia. Példakódért tekintse meg az erőforrás szótárakat {x:Bind} használatával.
A lefordított kötéseket tartalmazó lapok és felhasználói vezérlők "Kötések" tulajdonságot tartalmaznak a létrehozott kódban. Ez a következő módszereket foglalja magában:
- Update() – Ez frissíti az összes lefordított kötés értékét. Az egyirányú és kétirányú kötéseknél a figyelők csatlakoztatva lesznek a változások észleléséhez.
- Initialize() – Ha a kötések inicializálása még nem történt meg, az Update() meghívásával inicializálja a kötéseket
- StopTracking() – Ez feloldja az egyirányú és kétirányú kötésekhez létrehozott összes figyelőt. Az Update() metódussal újra inicializálhatók.
Megjegyzés:
A Windows 10 1607-es verziójától kezdve az XAML-keretrendszer beépített logikai és láthatósági konvertert biztosít. A konverter a true értéket a Visible enumerálási értékhez, és a false értéket a Collapsed-hez rendeli, így a Visibility tulajdonságot konverter létrehozása nélkül is kötheti egy logikai értékhez. Vegye figyelembe, hogy ez nem a függvénykötés egyik funkciója, csak a tulajdonságkötés. A beépített konverter használatához az alkalmazás minimális cél SDK-verziójának 14393-as vagy újabb verziónak kell lennie. Nem használható, ha az alkalmazás a Windows 10 korábbi verzióit célozza meg. További információ a célverziókról: Adaptív verziókód.
Jótanács
Ha egyetlen kapcsos zárójelet kell megadnia egy értékhez, például az Elérési út vagy a ConverterParameter esetén, akkor azt egy fordított perjel előzi meg: \{. Másik lehetőségként zárja be a teljes karakterláncot, amely tartalmazza a menekítendő kapcsos zárójeleket egy másodlagos idézőjelkészletbe, például ConverterParameter='{Mix}'.
A konverter, a ConverterLanguage és a ConverterLanguage mind a kötési forrásból származó érték vagy típus kötési céltulajdonságokkal kompatibilis típussá vagy értékké alakításának forgatókönyvéhez kapcsolódnak. További információkért és példákért tekintse meg az Adatkötés részletes adatkonvertálás című szakaszát.
A(z) {x:Bind} csak korrektúrakiterjesztés, és nem lehet programozott módon létrehozni vagy módosítani az ilyen kötéseket. A korrektúrakiterjesztésekkel kapcsolatos további információkért lásd az XAML áttekintését.
Windows developer