Přehled deklarací připojení

Toto téma popisuje různé způsoby, jak můžete deklarovat vazbu.

Požadavky

Než si přečtete toto téma, je důležité, abyste se seznámili s konceptem a používáním rozšíření značek. Další informace o rozšířeních značek naleznete v tématu Rozšíření značek a WPF XAML.

Toto téma se nezabývá koncepty datových vazeb. Diskuzi o konceptech datových vazeb najdete v tématu Přehled datových vazeb.

Deklarování vazby v XAML

Tato část popisuje, jak deklarovat vazbu v JAZYCE XAML.

Použití rozšíření značek

Binding je rozšíření značek. Při použití rozšíření vazby deklarovat vazbu, deklarace se skládá z řady klauzulí za Binding klíčovým slovem a oddělené čárkami (,). Klauzule v deklaraci vazby mohou být v libovolném pořadí a existuje mnoho možných kombinací. Klauzule jsou dvojice Name=Value, kde Name je název Binding vlastnosti a Value je hodnota, kterou pro vlastnost nastavujete.

Při vytváření řetězců deklarací vazby v kódu musí být připojeny ke konkrétní vlastnosti závislosti cílového objektu. Následující příklad ukazuje, jak vytvořit vazbu TextBox.Text vlastnosti pomocí rozšíření vazby, Source určení a Path vlastnosti.

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

Většinu vlastností Binding třídy můžete zadat tímto způsobem. Další informace o rozšíření vazby a také seznam Binding vlastností, které nelze nastavit pomocí rozšíření vazby, naleznete v přehledu Rozšíření značek vazby.

Syntaxe elementu object

Syntaxe elementu objektu je alternativou k vytvoření deklarace vazby. Ve většině případů neexistuje žádná konkrétní výhoda použití rozšíření značek nebo syntaxe elementu objektu. V případech, kdy rozšíření značek nepodporuje váš scénář, například pokud je hodnota vlastnosti typu neřetězcový, pro který neexistuje žádný převod typu, musíte použít syntaxi elementu objektu.

Následuje příklad syntaxe elementu objektu i použití rozšíření značek:

<TextBlock Name="myconvertedtext"
  Foreground="{Binding Path=TheDate,
                       Converter={StaticResource MyConverterReference}}">
  <TextBlock.Text>
    <Binding Path="TheDate"
             Converter="{StaticResource MyConverterReference}"/>
  </TextBlock.Text>
</TextBlock>

Příklad sváže vlastnost deklarováním vazby Foreground pomocí syntaxe rozšíření. Deklarace vazby pro Text vlastnost používá syntaxi elementu objektu.

Další informace o různých termínech najdete v tématu Podrobnosti o syntaxi XAML.

MultiBinding a PriorityBinding

MultiBinding nepodporuje PriorityBinding syntaxi rozšíření XAML. Proto je nutné použít syntaxi elementu objektu, pokud deklarujete MultiBinding nebo v PriorityBinding JAZYCE XAML.

Vytvoření vazby v kódu

Dalším způsobem, jak určit vazbu, je nastavit vlastnosti přímo na Binding objekt v kódu. Následující příklad ukazuje, jak vytvořit Binding objekt a zadat vlastnosti v kódu. V tomto příkladu je objekt, TheConverter který implementuje IValueConverter rozhraní.

private void OnPageLoaded(object sender, EventArgs e)
{
    // Make a new source, to grab a new timestamp
    MyData myChangedData = new MyData();

    // Create a new binding
    // TheDate is a property of type DateTime on MyData class
    Binding myNewBindDef = new Binding("TheDate");

    myNewBindDef.Mode = BindingMode.OneWay;
    myNewBindDef.Source = myChangedData;
    myNewBindDef.Converter = TheConverter;
    myNewBindDef.ConverterCulture = new CultureInfo("en-US");

      // myDatetext is a TextBlock object that is the binding target object
    BindingOperations.SetBinding(myDateText, TextBlock.TextProperty, myNewBindDef);
    BindingOperations.SetBinding(myDateText, TextBlock.ForegroundProperty, myNewBindDef);

    lbChooseCulture.SelectedIndex = 0;
}
 Private Sub OnPageLoaded(ByVal sender As Object, ByVal e As EventArgs)
     ' Make a new source, to grab a new timestamp
     Dim myChangedData As New MyData()

     ' Create a new binding
 ' TheDate is a property of type DateTime on MyData class
     Dim myNewBindDef As New Binding("TheDate")

     myNewBindDef.Mode = BindingMode.OneWay
     myNewBindDef.Source = myChangedData
     myNewBindDef.Converter = TheConverter
     myNewBindDef.ConverterCulture = New CultureInfo("en-US")

' myDatetext is a TextBlock object that is the binding target object
     BindingOperations.SetBinding(myDateText, TextBlock.TextProperty, myNewBindDef)
     BindingOperations.SetBinding(myDateText, TextBlock.ForegroundProperty, myNewBindDef)

     lbChooseCulture.SelectedIndex = 0
 End Sub

Pokud je objekt, který vytváříte vazbu, FrameworkElement nebo můžete metodu FrameworkContentElement SetBinding v objektu volat přímo namísto použití BindingOperations.SetBinding. Příklad najdete v tématu Vytvoření vazby v kódu.

Syntaxe cesty vazby

Path Vlastnost použijte k určení zdrojové hodnoty, ke které chcete vytvořit vazbu:

  • V nejjednodušším případě Path je hodnota vlastnosti název vlastnosti zdrojového objektu, který se má použít pro vazbu, například Path=PropertyName.

  • Podproperties vlastnosti lze zadat podobnou syntaxí jako v jazyce C#. Klauzule Path=ShoppingCart.Order například nastaví vazbu na subproperty Order objektu nebo vlastnosti ShoppingCart.

  • Chcete-li vytvořit vazbu k připojené vlastnosti, umístěte závorky kolem připojené vlastnosti. Například pro vazbu k připojené vlastnosti DockPanel.Dock, syntaxe je Path=(DockPanel.Dock).

  • Indexery vlastnosti lze zadat v hranatých závorkách za názvem vlastnosti, ve které je použit indexer. Klauzule Path=ShoppingCart[0] například nastaví vazbu na index, který odpovídá tomu, jak interní indexování vlastnosti zpracovává literálový řetězec "0". Podporují se také vnořené indexery.

  • Indexery a dílčí podmínky můžou být v Path klauzuli smíšené, například Path=ShoppingCart.ShippingInfo[MailingAddress,Street].

  • Uvnitř indexerů můžete mít více parametrů indexeru oddělených čárkami (,). Typ každého parametru lze zadat pomocí závorek. Můžete Path="[(sys:Int32)42,(sys:Int32)24]"mít například , kde sys je namapován na System obor názvů.

  • Pokud je zdrojem zobrazení kolekce, lze aktuální položku zadat lomítkem (/). Klauzule Path=/ například nastaví vazbu na aktuální položku v zobrazení. Pokud je zdrojem kolekce, tato syntaxe určuje aktuální položku výchozího zobrazení kolekce.

  • Názvy a lomítka lze kombinovat a procházet vlastnosti, které jsou kolekcemi. Path=/Offices/ManagerName Například určuje aktuální položku zdrojové kolekce, která obsahuje Offices vlastnost, která je také kolekcí. Její aktuální položka je objekt, který obsahuje ManagerName vlastnost.

  • Volitelně lze použít cestu tečky (.) k vytvoření vazby k aktuálnímu zdroji. Například Text="{Binding}" je ekvivalentní s Text="{Binding Path=.}".

Mechanismus pro zapouzdření

  • Uvnitř indexerů ([ ]) znak stříšky (^) uvozuje další znak.

  • Pokud jste v jazyce XAML nastavili Path , musíte také uvést (pomocí entit XML) určité znaky, které jsou speciální pro definici jazyka XML:

    • Slouží &amp; k řídicímu znaku "&".

    • Slouží &gt; k úniku koncové značky ">".

  • Kromě toho, pokud popisujete celou vazbu v atributu pomocí syntaxe rozšíření značek, musíte řídicí znaky (pomocí zpětného lomítka \), které jsou speciální pro analyzátor rozšíření značek WPF:

    • Zpětné lomítko (\) je samotný řídicí znak.

    • Symbol rovná se (=) odděluje název vlastnosti od hodnoty vlastnosti.

    • Čárka (,) odděluje vlastnosti.

    • Pravá složená závorka (}) je konec rozšíření značek.

Výchozí chování

Výchozí chování je následující, pokud není zadáno v deklaraci.

  • Vytvoří se výchozí převaděč, který se pokusí provést převod typu mezi zdrojovou hodnotou vazby a cílovou hodnotou vazby. Pokud převod nelze provést, vrátí výchozí převaděč null.

  • Pokud nenastavíte ConverterCulture, modul vazeb použije Language vlastnost cílového objektu vazby. V JAZYCE XAML se tato výchozí hodnota "en-US" nebo dědí hodnotu z kořenového elementu (nebo jakéhokoli prvku) stránky, pokud byl explicitně nastaven.

  • Pokud už vazba obsahuje kontext dat (například zděděný kontext dat pocházející z nadřazeného elementu) a libovolnou položku nebo kolekci vrácenou tímto kontextem, je vhodná pro vazbu bez nutnosti další úpravy cesty, deklarace vazby nemusí mít vůbec žádné klauzule: {Binding} To je často způsob, jakým je vazba určena pro styl dat, v případě, že vazba působí na kolekci. Další informace najdete v části Celé objekty používané jako zdroj vazby v přehledu zdrojů vazeb.

  • Výchozí hodnota Mode se liší mezi jednosměrnou a obousměrnou v závislosti na vlastnosti závislosti, která je vázána. Režim vazby můžete vždy deklarovat explicitně, abyste měli jistotu, že vaše vazba má požadované chování. Obecně platí, že uživatelsky upravitelné vlastnosti ovládacího prvku, například TextBox.Text a RangeBase.Value, mají výchozí obousměrné vazby, zatímco většina ostatních vlastností má výchozí jednosměrné vazby.

  • Výchozí UpdateSourceTrigger hodnota se liší mezi PropertyChanged vlastnostmi vázané závislosti a LostFocus v závislosti na vlastnosti vázané závislosti. Výchozí hodnota pro většinu vlastností závislosti je PropertyChanged, zatímco TextBox.Text vlastnost má výchozí hodnotu LostFocus.

Viz také