Share via


Vue d'ensemble des déclarations de liaison

Mise à jour : novembre 2007

Cette rubrique traite des différentes manières de déclarer une liaison.

Cette rubrique comprend les sections suivantes.

  • Composants requis
  • Déclaration d'une liaison en XAML
  • Création d'une liaison dans le code
  • Syntaxe de Path pour la liaison
  • Comportements par défaut
  • Rubriques connexes

Composants requis

Avant de lire cette rubrique, il importe que vous soyez familiarisé avec le concept et l'utilisation des extensions de balisage. Pour plus d'informations sur les extensions de balisage, consultez Extensions de balisage et XAML.

Cette rubrique n'aborde pas les concepts de liaison de données. Pour en savoir plus sur les concepts de liaison de données, consultez Vue d'ensemble de la liaison de données.

Déclaration d'une liaison en XAML

Cette section explique comment déclarer une liaison en XAML (Extensible Application Markup Language).

Utilisation d'extension de balisage

Binding est une extension de balisage. Lorsque vous utilisez l'extension de liaison pour déclarer une liaison, la déclaration consiste en une série de clauses qui suivent le mot clé Binding et sont séparées par des virgules (,). Les clauses de la déclaration de liaison peuvent se présenter dans n'importe quel ordre et de nombreuses combinaisons sont possibles. Les clauses sont des paires Nom= Valeur, où Nom correspond au nom de la propriété Binding et Valeur correspond à la valeur que vous affectez à la propriété.

Lorsque vous créez des chaînes de déclaration de liaison dans la balise, vous devez les attacher à la propriété de dépendance spécifique d'un objet cible. L'exemple suivant montre comment lier la propriété TextBox.Text à l'aide de l'extension de liaison, en spécifiant les propriétés Source, Path et UpdateSourceTrigger.

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

Vous pouvez ainsi spécifier la plupart des propriétés de la classe Binding. Pour plus d'informations sur l'extension de liaison et pour obtenir la liste des propriétés Binding qui ne peuvent pas être définies à l'aide de l'extension de liaison, consultez la vue d'ensemble Binding, extension de balisage.

Syntaxe des éléments objet

La syntaxe d'éléments objet est une alternative à la création de la déclaration de liaison. Dans la plupart des cas, l'utilisation de l'extension de balisage ou de la syntaxe d'élément objet ne présente aucun avantage particulier. Toutefois, vous devez utiliser la syntaxe d'élément objet lorsque l'extension de balisage ne prend pas en charge votre scénario, par exemple : lorsque la valeur de votre propriété est d'un type non-chaîne pour lequel il n'existe aucune conversion.

L'exemple suivant illustre à la fois la syntaxe d'élément objet et l'utilisation d'extension de balisage :

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

L'exemple lie la propriété Foreground en déclarant une liaison à l'aide de la syntaxe d'extension. La déclaration de liaison pour la propriété Text utilise la syntaxe d'élément objet.

Pour plus d'informations sur les différents termes, consultez Terminologie de la syntaxe XAML.

MultiBinding et PriorityBinding

MultiBinding et PriorityBinding ne prennent pas en charge la syntaxe d'extension XAML. Par conséquent, vous devez utiliser la syntaxe d'élément objet si vous déclarez un MultiBinding ou un PriorityBinding en XAML.

Création d'une liaison dans le code

Pour spécifier une liaison, vous pouvez également définir les propriétés directement sur un objet Binding dans le code. L'exemple suivant indique comment créer un objet Binding et spécifier les propriétés dans le code :

    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);



...


}

Si l'objet que vous liez est un FrameworkElement ou un FrameworkContentElement, vous pouvez appeler la méthode SetBinding directement sur votre objet au lieu d'utiliser BindingOperations.SetBinding. Pour obtenir un exemple, consultez Comment : créer une liaison dans du code.

Syntaxe de Path pour la liaison

Utilisez la propriété Path pour spécifier la valeur source que vous souhaitez utiliser pour la liaison :

  • Dans le cas le plus simple, la valeur de la propriété Path correspond au nom de la propriété de l'objet source à utiliser pour la liaison, comme Path=PropertyName.

  • Les sous-propriétés d'une propriété peuvent être spécifiées par une syntaxe semblable, comme dans C#. Par exemple, la clause Path=ShoppingCart.Order affecte à la liaison la valeur de la sous-propriété Order de l'objet ou la propriété ShoppingCart.

  • Pour créer une liaison avec une propriété attachée, placez des parenthèses autour de la propriété attachée. Par exemple, pour créer une liaison avec la propriété attachée DockPanel.Dock, la syntaxe est Path=(DockPanel.Dock).

  • Les indexeurs d'une propriété peuvent être spécifiés dans des crochets qui suivent le nom de la propriété où l'indexeur est appliqué. Par exemple, la clause Path=ShoppingCart[0] affecte à la liaison l'index qui correspond à la manière dont l'indexation interne de votre propriété gère la chaîne littérale "0". Les indexeurs imbriqués sont également pris en charge.

  • Vous pouvez combiner des indexeurs et des sous-propriétés dans une clause Path. Par exemple : Path=ShoppingCart.ShippingInfo[MailingAddress,Street].

  • À l'intérieur des indexeurs peuvent figurer plusieurs paramètres d'indexeur séparés par des virgules (,). Vous pouvez spécifier le type de chaque paramètre à l'aide de parenthèses. Par exemple, vous pouvez avoir Path="[(sys:Int32)42,(sys:Int32)24]", où sys est mappé à l'espace de noms System.

  • Lorsque la source est une vue de collection, l'élément actuel peut être spécifié avec une barre oblique (/). Par exemple, la clause Path=/ affecte la liaison à l'élément actuel dans la vue. Lorsque la source est une collection, cette syntaxe spécifie l'élément actuel de la vue de collection par défaut.

  • Les noms de propriété et les barres obliques peuvent être combinées pour parcourir les propriétés qui sont des collections. Par exemple, Path=/Offices/ManagerName spécifient l'élément actuel de la collection de sources, qui contient une propriété Offices qui est également une collection. Son élément actuel est un objet qui contient une propriété ManagerName.

  • Un Path incluant un point (.) peut également être utilisé pour effectuer une liaison vers la source actuelle. Par exemple, Text=”{Binding}” est équivalent à Text=”{Binding Path=.}”.

Mécanisme d'échappement

  • À l'intérieur des indexeurs ([]), le signe d'insertion (^) remplace le caractère suivant.

  • Si vous définissez Path en XAML, vous devez également remplacer (à l'aide d'entités XML) certains caractères spécifiques à l'analyseur XML :

    • Utilisez &amp; pour créer une séquence d'échappement pour le caractère "&".

    • Utilisez &gt; pour créer une séquence d'échappement pour la balise de fin ">".

  • En outre, si vous décrivez la liaison entière dans un attribut à l'aide de la syntaxe d'extension de balisage, vous devez créer une séquence d'échappement (à l'aide de la barre oblique inverse "\") pour les caractères propres à l'analyseur d'extension de balisage WPF :

    • La barre oblique inverse (\) est le caractère d'échappement lui-même.

    • Le signe égal (=) sépare le nom de propriété de la valeur de propriété.

    • La virgule (,) sépare des propriétés.

    • L'accolade fermante (}) marque la fin d'une extension de balisage.

Comportements par défaut

Le comportement par défaut est le suivant si vous n'avez rien spécifié dans la déclaration.

  • Un convertisseur par défaut est créé et tente de procéder à une conversion de type entre la valeur de la source de liaison et la valeur de la cible de liaison. En cas d'échec de la conversion, le convertisseur par défaut retourne la valeur null.

  • Si vous ne définissez pas ConverterCulture, le moteur de liaison utilise la propriété Language de l'objet cible de la liaison. En XAML, la valeur par défaut est "en-US" ou est héritée de la valeur de l'élément racine (ou tout élément) de la page, si une valeur a été explicitement définie.

  • Tant que la liaison a déjà un contexte de données (par exemple, le contexte de données hérité provenant d'un élément parent) et que l'élément ou la collection retourné par ce contexte convient pour lier sans requérir de changement de chemin d'accès supplémentaire, une déclaration de liaison ne peut avoir aucune clause : {Binding} C'est souvent de cette façon qu'une liaison est spécifiée pour l'application du style de données, où la liaison agit sur une collection. Pour plus d'informations, consultez la section Objets entiers utilisés comme source de liaison dans la Vue d'ensemble des sources de liaison.

  • Le Mode par défaut est unidirectionnel ou bidirectionnel selon la propriété de dépendance liée. Vous pouvez toujours déclarer explicitement le mode de liaison pour garantir que votre liaison a le comportement désiré. En général, les propriétés de contrôle modifiables par l'utilisateur, telles que TextBox.Text et RangeBase.Value, ont comme valeur par défaut des liaisons bidirectionnelles, alors que la plupart des autres propriétés ont comme valeur par défaut des liaisons unidirectionnelles.

  • La valeur UpdateSourceTrigger par défaut est PropertyChanged ou LostFocus selon la propriété de dépendance liée. La valeur par défaut de la plupart des propriétés de dépendance est PropertyChanged, alors que la valeur par défaut de la propriété TextBox.Text est LostFocus.

Voir aussi

Concepts

Vue d'ensemble de la liaison de données

Optimisation des performances : liaison de données

Autres ressources

Rubriques Comment relatives aux liaisons de données