Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka Obecné informace o používání datových vazeb v aplikaci s {x:Bind} (a pro porovnání mezi {x:Bind} a {Binding}) najdete podrobné informace o datové vazbě.
Rozšíření značky {x:Bind}, nové pro Windows 10, je alternativou k {Binding}. {x:Bind} běží za kratší dobu a méně paměti než {Binding} a podporuje lepší ladění.
Při kompilaci XAML se {x:Bind} převede na kód, který získá hodnotu z vlastnosti zdroje dat a nastaví ji na vlastnost zadanou v kódu. Objekt vazby lze volitelně nakonfigurovat tak, aby sledoval změny v hodnotě vlastnosti zdroje dat a aktualizoval se na základě těchto změn (Mode="OneWay"). Lze také volitelně nakonfigurovat tak, aby poslal změny ve své vlastní hodnotě zpět do zdrojové vlastnosti (Mode="TwoWay").
Objekty vazby vytvořené objekty {x:Bind} a {Binding} jsou z velké části funkčně ekvivalentní.
{x:Bind} ale spustí speciální kód, který generuje v době kompilace, a {Binding} používá kontrolu objektu runtime pro obecné účely. V důsledku toho mají vazby {x:Bind} (často označované jako kompilované vazby) skvělý výkon, poskytují ověřování v době kompilace pro výrazy vazby a podporují ladění tím, že umožňují nastavit zarážky v souborech kódu generovaných jako částečnou třídu pro vaši stránku. Tyto soubory najdete ve složce obj s názvy jako (pro C#). <view name>.g.cs
Návod
{x:Bind} má výchozí režim OneTime, na rozdíl od {Binding}, který má výchozí režim OneWay. Tato možnost byla zvolena z důvodů výkonu, protože použití OneWaye způsobí, že se pro připojení a zpracování detekce změn vygeneruje více kódu. Můžete explicitně zadat režim pro použití vazby OneWay nebo TwoWay. Můžete také použít x:DefaultBindMode ke změně výchozího režimu pro {x:Bind} pro určitý segment stromu značek. Zadaný režim se vztahuje na všechny výrazy {x:Bind} pro daný prvek a jeho podřízené prvky, které explicitně nezadávají režim jako součást vazby.
Použití atributu XAML
<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}" .../>
| Term | Description |
|---|---|
| propertyPath | Řetězec, který určuje cestu vlastnosti pro vazbu. Další informace jsou uvedeny v sekci Cesta k vlastnosti níže. |
| bindingProperties | |
| propName=value[, propName=value]* | Jedna nebo více vlastností vazby, které jsou zadány pomocí syntaxe páru název/hodnota. |
| propName | Název řetězce vlastnosti, která se má nastavit u objektu vazby. Například "Converter". |
| value | Hodnota, na kterou chcete nastavit vlastnost. Syntaxe argumentu závisí na nastavené vlastnosti. Tady je příklad použití propName=hodnoty, kde je hodnota sama o sobě rozšířením značek: Converter={StaticResource myConverterClass}. Další informace najdete v části Vlastnosti, které můžete nastavit pomocí oddílu {x:Bind} . |
Examples
<Page x:Class="QuizGame.View.HostView" ... >
<Button Content="{x:Bind Path=ViewModel.NextButtonText, Mode=OneWay}" ... />
</Page>
Tento příklad XAML používá {x:Bind} s vlastností ListView.ItemTemplate . Poznamenejte si deklaraci hodnoty x:DataType .
<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>
Cesta k vlastnosti
VlastnostPath nastaví cestu pro výraz {x:Bind} .
Cesta je vlastnostní cesta určující hodnotu vlastnosti, dílčí vlastnosti, pole nebo metody, k nimž jste vázáni jako ke zdroji. Název vlastnosti Path můžete zmínit explicitně: {x:Bind Path=...}. Nebo ho můžete vynechat: {x:Bind ...}.
Určení cesty k vlastnosti
{x:Bind} nepoužívá objekt DataContext jako výchozí zdroj – místo toho používá samotný ovládací prvek stránky nebo uživatele. Bude tedy hledat vlastnosti, pole a metody v kódu stránky nebo uživatelského ovládacího prvku. Pokud chcete zobrazit model zobrazení pro {x:Bind}, budete obvykle chtít do kódu stránky nebo uživatelského ovládacího prvku přidat nová pole nebo vlastnosti. Prvky v cestě vlastností jsou oddělovány tečkami (.) a můžete zahrnout více oddělovačů k procházení následujícími podvlastnostmi. Použijte tečkovaný oddělovač bez ohledu na programovací jazyk použitý k implementaci objektu vázaného na.
Příklad: Na stránce Text="{x:Bind Employee.FirstName}" vyhledá na stránce Employee člena a potom FirstName člena na objektu vráceném členem Employee. Pokud vytváříte vazbu ovládacího prvku položky na vlastnost, která obsahuje závislé osoby zaměstnance, vaše cesta k vlastnosti může být "Employee.Dependents" a šablona položky ovládacího prvku položky by zajistila zobrazení položek v "Dependents".
Pro C++/CX nemůže {x:Bind} vytvořit vazbu k soukromým polím a vlastnostem na stránce nebo datovém modelu – budete muset mít veřejnou vlastnost, aby byla svázatelná. Povrchová oblast vazby musí být vystavena jako třídy nebo rozhraní CX, abychom mohli získat relevantní metadata. Atribut [Bindable] by neměl být potřeba.
Při použití x:Bind nemusíte jako součást vazbového výrazu používat ElementName=xxx . Místo toho můžete použít název elementu jako první část cesty pro vazbu, protože pojmenované prvky se stanou poli v rámci stránky nebo uživatelského ovládacího prvku, který představuje kořenový zdroj vazby.
Collections
Pokud je zdrojem dat kolekce, cesta k vlastnosti může určovat položky v kolekci podle jejich pozice nebo indexu. Například Teams[0]. Player", kde literál "[]" uzavře "0", která požaduje první položku v kolekci s nulovým indexem.
Pokud chcete použít indexer, model musí implementovat IList<T> nebo IVector<T> u typu vlastnosti, která bude indexována. (Všimněte si, že IReadOnlyList<T> a IVectorView<T> nepodporují syntaxi indexeru.) Pokud typ indexované vlastnosti podporuje INotifyCollectionChanged nebo IObservableVector a vazba je OneWay nebo TwoWay, pak se zaregistruje a naslouchá oznámení o změnách v těchto rozhraních. Logika detekce změn se aktualizuje na základě všech změn kolekce, i když to nemá vliv na konkrétní indexovanou hodnotu. Důvodem je to, že logika naslouchání je společná ve všech instancích kolekce.
Pokud je zdrojem dat slovník nebo mapa, cesta k vlastnosti může určovat položky v kolekci podle názvu řetězce. <Například TextBlock Text="{x:Bind Players['John Smith']}" /> vyhledá položku ve slovníku s názvem "John Smith". Název musí být uzavřený v uvozovkách a je možné použít jednoduché nebo dvojité uvozovky. Hat (^) lze použít pro escapování uvozovek v řetězcích. Obvykle je nejjednodušší použít alternativní uvozovky z těch, které se používají pro atribut XAML. (Všimněte si, že IReadOnlyDictionary<T> a IMapView<T> nepodporují syntaxi indexeru.)
Aby bylo možné použít řetězcový indexer, model musí implementovat IDictionary<řetězec, T> nebo IMap<řetězec, T> na typu vlastnosti, která má být indexována. Pokud typ indexované vlastnosti podporuje IObservableMap a vazba je OneWay nebo TwoWay, pak se zaregistruje a naslouchá oznámení o změnách v těchto rozhraních. Logika detekce změn se aktualizuje na základě všech změn kolekce, i když to nemá vliv na konkrétní indexovanou hodnotu. Důvodem je to, že logika naslouchání je společná ve všech instancích kolekce.
Připojené vlastnosti
Chcete-li vytvořit vazbu s připojenými vlastnostmi, je nutné za tečku vložit název třídy a vlastnosti do závorek. Například Text="{x:Bind Button22.(Grid.Row)}" Pokud vlastnost není deklarována v oboru názvů Xaml, budete ji muset předponovat oborem názvů XML, který byste měli namapovat na obor názvů kódu v záhlaví dokumentu.
Obsazení
Kompilované vazby jsou silně typované a určí typ každého kroku v cestě. Pokud vrácený typ člena nemá, selže v době kompilace. Můžete zadat přetypování, aby bylo možné určit vazbu skutečného typu objektu.
V následujícím případě je obj vlastností objektu typu, ale obsahuje textové pole, takže můžeme použít text="{x:Bind ((TextBox)obj). Text}" nebo Text="{x:Bind obj.(TextBox.Text)}".
Pole groups3 v text="{x:Bind ((data:SampleDataGroup)groups3[0]). Title} je slovník objektů, takže ho musíte přetypovat na data:SampleDataGroup. Všimněte si použití předpony oboru názvů data: pro mapování typu objektů na kódový obor názvů, který není součástí výchozího oboru názvů XAML.
Poznámka: Syntaxe přetypování ve stylu C# je flexibilnější než syntaxe připojených vlastností, a proto se jedná o doporučenou syntaxi pro budoucí použití.
Přetypování bez cest
Nativní analyzátor vazeb neposkytuje klíčové slovo, které má představovat this jako parametr funkce, ale podporuje přetypování bez cest (například {x:Bind (x:String)}), které lze použít jako parametr funkce. Proto je {x:Bind MethodName((namespace:TypeOfThis))} platným způsobem, jak provést něco, co je ekvivalentní z hlediska konceptu s {x:Bind MethodName(this)}.
Příklad:
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}";
}
}
}
Funkce v cestách vazeb
Počínaje Windows 10, verzí 1607, funkce {x:Bind} podporuje použití funkce jako posledního kroku v cestě vazby. Jedná se o výkonnou funkci pro datové vazby, která poskytuje různé možnosti v označkování. Podrobnosti najdete v vazbách funkcí .
Vazba události
Vazba událostí je jedinečná vlastnost pro kompilovanou vazbu. Umožňuje určit obslužnou rutinu události pomocí vazby, a nemusí se jednat o metodu kódu za kódem. Příklad: Click="{x:Bind rootFrame.GoForward}".
U událostí nesmí být cílová metoda přetížená a musí také:
- Porovná podpis události.
- NEBO nemají žádné parametry.
- NEBO mají stejný počet parametrů typů, které lze přiřadit z typů parametrů události.
Ve vygenerovaném kódu zpracovává zkompilovaná vazba událost a směruje ji do metody v modelu, přičemž vyhodnocuje cestu vazebního výrazu, když k události dojde. To znamená, že na rozdíl od vazeb vlastností nesleduje změny modelu.
Další informace o syntaxi řetězce pro cestu k vlastnosti najdete v tématu Syntaxe cesty k vlastnosti a mějte na paměti rozdíly popsané zde pro {x:Bind}.
Vlastnosti, které můžete nastavit pomocí {x:Bind}.
{x:Bind} je znázorněna pomocí zástupné syntaxe bindingProperties , protože v rozšíření značek je možné nastavit více vlastností pro čtení a zápis. Vlastnosti lze nastavit v libovolném pořadí pomocí dvojichodnot= oddělených čárkami. Všimněte si, že do výrazu vazby nelze zahrnout konce řádků. Některé vlastnosti vyžadují typy, které nemají převod typu, takže tyto vlastnosti vyžadují rozšíření značek, která jsou vnořená do objektu {x:Bind}.
Tyto vlastnosti fungují podobně jako vlastnosti třídy Binding .
| Vlastnictví | Description |
|---|---|
| Path | Viz část Cesta k vlastnosti výše. |
| Převodník | Určuje objekt převaděče, který je volán vazebním strojem. Převaděč lze nastavit v XAML, ale pouze pokud odkazujete na instanci objektu, kterou jste přiřadili prostřednictvím rozšíření značky {StaticResource} na tento objekt v rámci slovníku prostředků. |
| ConverterLanguage | Určuje kulturní nastavení, které má převaděč používat. (Pokud nastavujete ConverterLanguage, měli byste také nastavit Converter.) Kultura je nastavena jako standardní identifikátor. Další informace najdete v tématu ConverterLanguage. |
| ConverterParameter | Určuje parametr převaděče, který lze použít v logice převaděče. (Pokud nastavujete ConverterParameter , měli byste také nastavit Converter.) Většina převaděčů používá jednoduchou logiku, která získá všechny informace potřebné z předané hodnoty k převodu a nepotřebuje hodnotu ConverterParameter . ConverterParameter parametr je určen pro středně pokročilé implementace převaděče, které mají více než jednu logiku, jež závisí na tom, co se předává v ConverterParameter. Můžete napsat převaděč, který používá jiné hodnoty než řetězce, ale to je neobvyklé, viz Poznámky v ConverterParameter další informace. |
| Náhradní hodnota | Určuje hodnotu, která se má zobrazit, když nelze zdroj nebo cestu vyřešit. |
| Mode | Určuje režim vazby, jako jeden z těchto řetězců: "OneTime", "OneWay" nebo "TwoWay". Výchozí hodnota je OneTime. Všimněte si, že se liší od výchozího nastavení pro {Binding}, což je ve většině případů OneWay. |
| TargetNullValue | Určuje hodnotu, která se má zobrazit, když se zdrojová hodnota přeloží, ale má explicitně hodnotu null. |
| BindBack | Určuje funkci, která se má použít pro opačný směr obousměrné vazby. |
| UpdateSourceTrigger | Určuje, kdy se ve vazbách typu TwoWay mají změny vracet z ovládacího prvku do modelu. Výchozí hodnota pro všechny vlastnosti kromě TextBox.Text je PropertyChanged; TextBox.Text je LostFocus. |
Poznámka:
Pokud převádíte označování z {Binding} na {x:Bind}, mějte na paměti rozdíly ve výchozích hodnotách vlastnosti Mode. x:DefaultBindMode lze použít ke změně výchozího režimu pro x:Bind pro konkrétní segment stromu revizí. Vybraný režim se použije na tento prvek a jeho podřízené prvky pro všechny výrazy x:Bind, které neuvádějí explicitně režim jako součást vazby. OneTime je výkonnější než OneWay, protože použití OneWaye způsobí, že se vygeneruje více kódu pro připojení a zpracování detekce změn.
Poznámky
Vzhledem k tomu, že {x:Bind} používá vygenerovaný kód k dosažení jeho výhod, vyžaduje informace o typu v době kompilace. To znamená, že nelze vytvořit vazbu na vlastnosti, u kterých typ neznáte předem. Z tohoto důvodu nelze použít {x:Bind} s vlastností DataContext , která je typu Object, a je také předmětem změny za běhu.
Pokud používáte {x:Bind} s datovými šablonami, je nutné určit typ svázaný nastavením hodnoty x:DataType , jak je znázorněno v části Příklady . Můžete také přiřadit proměnnou jako rozhraní nebo základní typ třídy a potom v případě potřeby provádět přetypování k formulování úplného výrazu.
Kompilované vazby závisí na generování kódu. Pokud tedy použijete {x:Bind} ve slovníku zdrojů, musí mít slovník zdrojů třídu kódu na pozadí. Příklad kódu najdete ve slovníkech prostředků s {x:Bind} .
Stránky a uživatelské ovládací prvky, které obsahují kompilované vazby, budou mít ve vygenerovaném kódu vlastnost Bindings. To zahrnuje následující metody:
- Update() – Tím se aktualizují hodnoty všech zkompilovaných vazeb. Všechny jednosměrné nebo obousměrné vazby budou mít naslouchací mechanismy připojeny k detekci změn.
- Initialize() – Pokud vazby ještě nebyly inicializovány, zavolá update() k inicializaci vazeb.
- StopTracking() – Tím se odpojí všechny posluchače vytvořené pro jednosměrné a obousměrné vazby. Je možné je znovu inicializovat pomocí metody Update().
Poznámka:
Počínaje Windows 10, verze 1607, poskytuje architektura XAML zabudovaný převodník pro konverzi typu Boolean na viditelnost. Převaděč mapuje true na hodnotu výčtu Visible a false na Collapsed, takže můžete navázat vlastnost Visibility na logickou hodnotu, aniž byste museli vytvořit převaděč. Všimněte si, že toto není vlastnost vazby funkce, ale pouze vazby vlastností. Pokud chcete použít integrovaný převaděč, minimální cílová verze sady SDK vaší aplikace musí být 14393 nebo novější. Nemůžete ho použít, když vaše aplikace cílí na starší verze Windows 10. Další informace o cílových verzích najdete v tématu Adaptivní kód verze.
Návod
Pokud potřebujete zadat jednu složenou závorku pro hodnotu, například v Path nebo ConverterParameter, použijte před ní zpětné lomítko: \{. Případně uzavřete celý řetězec, který obsahuje složené závorky, které potřebují úpravu pomocí sekundární sady uvozovek, například ConverterParameter='{Mix}'.
Převaděč, ConverterLanguage a ConverterLanguage jsou všechny související se scénářem převodu hodnoty nebo typu ze zdroje vazby na typ nebo hodnotu, která je kompatibilní s cílovou vlastností vazby. Další informace a příklady najdete v části "Převody dat" v Podrobném popisu datové vazby.
{x:Bind} je pouze rozšíření značek, bez způsobu, jak vytvářet nebo manipulovat s těmito vazbami prostřednictvím kódu programu. Další informace o rozšířeních značek najdete v přehledu XAML.
Windows developer