Extension de balisage {Binding}
Remarque
Un nouveau mécanisme de liaison est disponible pour Windows 10, qui est optimisé pour les performances et la productivité des développeurs. Consultez l’extension de balisage {x :Bind}.
Remarque
Pour obtenir des informations générales sur l’utilisation de la liaison de données dans votre application avec {Binding} (et pour une comparaison complète entre {x :Bind} et {Binding}), consultez la liaison de données en profondeur.
L’extension de balisage {Binding} est utilisée pour lier des propriétés sur des contrôles aux valeurs provenant d’une source de données telle que du code. L’extension de balisage {Binding} est convertie au moment du chargement XAML en une instance de la classe Binding . Cet objet de liaison obtient une valeur d’une propriété sur une source de données et l’envoie à la propriété sur le contrôle. L’objet de liaison peut éventuellement être configuré pour observer les modifications apportées à la valeur de la propriété de source de données et se mettre à jour en fonction de ces modifications. Il peut également être configuré pour envoyer (push) des modifications à la valeur de contrôle vers la propriété source. La propriété qui est la cible d’une liaison de données doit être une propriété de dépendance. Pour plus d’informations, consultez la vue d’ensemble des propriétés de dépendance.
{Binding} a la même priorité de propriété de dépendance qu’une valeur locale et la définition d’une valeur locale dans le code impératif supprime l’effet de n’importe quel {Binding} défini dans le balisage.
Utilisation des attributs XAML
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Terme | Description |
---|---|
propertyPath | Chaîne qui spécifie le chemin de propriété de la liaison. Vous trouverez plus d’informations dans la section Chemin de propriété ci-dessous. |
bindingProperties | propName value[, propName==value]* Une ou plusieurs propriétés de liaison spécifiées à l’aide d’une syntaxe de paire nom/valeur. |
propName | Nom de chaîne de la propriété à définir sur l’objet Binding . Par exemple, « Convertisseur ». |
value | Valeur à définir pour la propriété. La syntaxe de l’argument dépend de la propriété propriétés de la classe Binding qui peut être définie avec la section {Binding} ci-dessous. |
Chemin de la propriété
Le chemin d’accès décrit la propriété à laquelle vous effectuez une liaison (la propriété source). Le chemin d’accès est un paramètre positionnel, ce qui signifie que vous pouvez utiliser le nom du paramètre explicitement ({Binding Path=EmployeeID}
), ou vous pouvez le spécifier comme premier paramètre non nommé ({Binding EmployeeID}
).
Le type de chemin d’accès est un chemin de propriété, qui est une chaîne qui prend la valeur d’une propriété ou d’une sous-propriété de votre type personnalisé ou d’un type d’infrastructure. Le type peut être, mais n’a pas besoin d’être, un DependencyObject. Les étapes d’un chemin de propriété sont délimitées par des points (.) et vous pouvez inclure plusieurs délimiteurs pour parcourir les sous-propriétés successives. Utilisez le délimiteur de points, quel que soit le langage de programmation utilisé pour implémenter l’objet lié.
Par exemple, pour lier l’interface utilisateur à la propriété prénom d’un objet employee, votre chemin de propriété peut être « Employee.FirstName ». Si vous liez un contrôle d’éléments à une propriété qui contient les dépendants d’un employé, votre chemin de propriété peut être « Employee.Dependents », et le modèle d’élément du contrôle d’éléments s’occuperait de l’affichage des éléments dans « Dépendants ».
Si la source de données est une collection, un chemin de propriété peut spécifier des éléments dans la collection en fonction de leur position ou de leur index. Par exemple, « Teams[0]. Joueurs », où le littéral « [] » entoure le « 0 » qui spécifie le premier élément d’une collection.
Lorsque vous utilisez une liaison ElementName à un DependencyObject existant, vous pouvez utiliser des propriétés jointes dans le cadre du chemin de propriété. Pour lever l’ambiguïté d’une propriété jointe afin que le point intermédiaire du nom de la propriété jointe ne soit pas considéré comme une étape dans un chemin de propriété, placez les parenthèses autour du nom de la propriété jointe qualifiée par le propriétaire ; par exemple, (AutomationProperties.Name)
.
Un objet intermédiaire de chemin de propriété est stocké en tant qu’objet PropertyPath dans une représentation au moment de l’exécution, mais la plupart des scénarios n’auront pas besoin d’interagir avec un objet PropertyPath dans le code. Vous pouvez généralement spécifier les informations de liaison dont vous avez besoin à l’aide de XAML.
Pour plus d’informations sur la syntaxe de chaîne d’un chemin de propriété, des chemins de propriété dans les zones de fonctionnalités d’animation et la construction d’un objet PropertyPath, consultez la syntaxe de chemin d’accès à la propriété.
Propriétés de la classe Binding qui peut être définie avec {Binding}
{Binding} est illustré avec la syntaxe d’espace réservé bindingProperties , car il existe plusieurs propriétés en lecture/écriture d’une liaison qui peut être définie dans l’extension de balisage. Les propriétés peuvent être définies dans n’importe quel ordre avec des paires de valeurs propName=séparées par des virgules. Certaines des propriétés nécessitent des types qui n’ont pas de conversion de type. Elles nécessitent donc des extensions de balisage de leur propre imbrication dans { Binding}.
Propriété | Description |
---|---|
Chemin d’accès | Consultez la section Chemin de propriété ci-dessus. |
Convertisseur | Spécifie un objet de convertisseur appelé par le moteur de liaison. Le convertisseur peut être défini dans le balisage à l’aide de l’extension de balisage {StaticResource} pour référencer cet objet à partir d’un dictionnaire de ressources. |
ConverterLanguage | Spécifie la culture à utiliser par le convertisseur. (Si vous définissez Convertisseur.) La culture est définie en tant qu’identificateur basé sur des normes. Pour plus d’informations, consultez ConverterLanguage |
ConverterParameter | Spécifie un paramètre de convertisseur qui peut être utilisé dans la logique de convertisseur. (Si vous définissez Convertisseur.) La plupart des convertisseurs utilisent une logique simple qui obtient toutes les informations dont ils ont besoin à partir de la valeur passée pour convertir, et n’ont pas besoin d’une valeur ConverterParameter . Le paramètre ConverterParameter est destiné aux implémentations de convertisseur plus complexes qui ont une logique conditionnelle qui permet de désactiver ce qui est passé dans ConverterParameter. Vous pouvez écrire un convertisseur qui utilise des valeurs autres que des chaînes, mais cela est rare, voir Remarques dans ConverterParameter pour plus d’informations. |
ElementName | Spécifie une source de données en référençant un autre élément dans la même construction XAML qui a une propriété Name ou un attribut x :Name. Il s’agit souvent de partager des valeurs associées ou d’utiliser des sous-propriétés d’un élément d’interface utilisateur pour fournir une valeur spécifique pour un autre élément, par exemple dans un modèle de contrôle XAML. |
FallbackValue | Spécifie une valeur à afficher lorsque la source ou le chemin d’accès ne peut pas être résolu. |
Mode | Spécifie le mode de liaison, comme l’une des valeurs suivantes : « OneTime », « OneWay » ou « TwoWay ». Celles-ci correspondent aux noms constants de l’énumération BindingMode . La valeur par défaut est « OneWay ». Notez que cela diffère de la valeur par défaut de {x :Bind}, qui est « OneTime ». |
RelativeSource | Spécifie une source de données en décrivant la position de la source de liaison par rapport à la position de la cible de liaison. Cela est le plus souvent utilisé dans les liaisons dans les modèles de contrôle XAML. Définition de l’extension de balisage {RelativeSource}. |
Source | Spécifie la source de données d’objet. Dans l’extension de balisage Binding, la propriété Source nécessite une référence d’objet, telle qu’une référence d’extension de balisage {StaticResource}. Si cette propriété n’est pas spécifiée, le contexte de données agissant spécifie la source. Il est plus courant de ne pas spécifier de valeur source dans des liaisons individuelles, et plutôt de s’appuyer sur le DataContext partagé pour plusieurs liaisons. Pour plus d’informations, consultez DataContext ou Liaison de données en profondeur. |
TargetNullValue | Spécifie une valeur à afficher lorsque la valeur source est résolue, mais est explicitement null. |
UpdateSourceTrigger | Spécifie le minutage des mises à jour sources de liaison. S’il n’est pas spécifié, la valeur par défaut est Par défaut. |
Remarque Si vous convertissez le balisage de {x :Bind} en {Binding}, tenez compte des différences dans les valeurs par défaut de la propriété Mode .
Converter, ConverterLanguage et ConverterLanguage sont tous liés au scénario de conversion d’une valeur ou d’un type à partir de la source de liaison en un type ou une valeur compatible avec la propriété cible de liaison. Pour plus d’informations et d’exemples, consultez la section « Conversions de données » de la liaison de données en profondeur.
Remarque
À compter de Windows 10, version 1607, l’infrastructure XAML fournit un convertisseur booléen intégré à visibility. Le convertisseur mappe true à la valeur d’énumération Visible et false à Collapsed afin de pouvoir lier une propriété Visibility à un booléen sans créer de convertisseur. Pour utiliser le convertisseur intégré, la version du SDK cible de votre application doit être 14393 ou une version ultérieure. Vous ne pouvez pas l’utiliser si votre application cible des versions antérieures de Windows 10. Pour plus d’informations sur les versions cibles, voir Code adaptatif de version.
Source, RelativeSource et ElementName spécifient une source de liaison, de sorte qu’elles s’excluent mutuellement.
Conseil Si vous devez spécifier une accolade unique pour une valeur, par exemple dans Path ou ConverterParameter, faites-la précéder d’une barre oblique inverse : . \{
Vous pouvez également placer la chaîne entière qui contient les accolades qui ont besoin d’échapper dans un ensemble de guillemets secondaires, par exemple ConverterParameter='{Mix}'
.
Exemples
<!-- binding a UI element to a view model -->
<Page ... >
<Page.DataContext>
<local:BookstoreViewModel/>
</Page.DataContext>
<GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
<Page.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</Page.Resources>
<Slider x:Name="sliderValueConverter" ... />
<TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
Mode=OneWay,
Converter={StaticResource GradeConverter}}"/>
</Page>
Le deuxième exemple définit quatre propriétés de liaison différentes : ElementName, Path, Mode et Converter. Le chemin d’accès dans ce cas est explicitement nommé en tant que propriété Binding . Le chemin d’accès est évalué à une source de liaison de données qui est un autre objet dans la même arborescence d’objets d’exécution, un curseur nommé sliderValueConverter
.
Notez comment la valeur de la propriété Converter utilise une autre extension de balisage , {StaticResource} extension de balisage. Il existe donc deux utilisations d’extension de balisage imbriquées ici. L’élément interne est évalué en premier, de sorte qu’une fois la ressource obtenue, il existe un IValueConverter pratique (classe personnalisée instanciée par l’élément local:S2Formatter
dans les ressources) que la liaison peut utiliser.
Prise en charge des outils
Microsoft IntelliSense dans Microsoft Visual Studio affiche les propriétés du contexte de données lors de la création de {Binding} dans l’éditeur de balisage XAML. Dès que vous tapez « {Binding », les propriétés de contexte de données appropriées pour Path sont affichées dans la liste déroulante. IntelliSense permet également d’utiliser les autres propriétés de Binding. Pour que cela fonctionne, vous devez disposer du contexte de données ou du contexte de données au moment du design dans la page de balisage. Go To Definition (F12) fonctionne également avec {Binding}. Vous pouvez également utiliser la boîte de dialogue de liaison de données.