Comment utiliser `` avec liaisons WPF et quels sont les différents cas d’utilisation ?
Réponses
Trop de publicités?Si vous souhaitez lier à une autre propriété sur l’objet :
Si vous souhaitez obtenir une propriété sur un ancêtre :
Si vous souhaitez obtenir une propriété sur le parent basé sur des modèles (que vous pouvez faire 2 liaisons moyen dans un ControlTemplate)
ou, plus courte (cela ne fonctionne que pour les liaisons OneWay) :
Binding RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemType}
}
...
La valeur par défaut de l'attribut de l' RelativeSource
est le Mode
de la propriété. Un ensemble complet de valeurs valides est donnée ici (à partir de MSDN):
PreviousData Permet de lier les données précédentes (qui contrôle qui contient l'élément de données) dans la liste des éléments de données en cours d'affichage.
TemplatedParent fait référence à l'élément pour lequel le modèle (dans lequel la liaison de données de l'élément existe) est appliquée. Ceci est similaire à la définition des TemplateBindingExtension et n'est applicable que si la Liaison est à l'intérieur d'un modèle.
L'autonomie fait référence à l'élément sur lequel vous définissez la liaison et vous permet de lier une propriété de l'élément à l'autre de la propriété sur le même élément.
FindAncestor fait référence à l'ancêtre de la mère de la chaîne de la liaison de données de l'élément. Vous pouvez l'utiliser pour se lier à un ancêtre d'un type spécifique ou de ses sous-classes. C'est le mode que vous utilisez, si vous souhaitez spécifier AncestorType et/ou AncestorLevel.
Voici la feuille de triche qui n’aide ne pas être confus : http://www.nbdtech.com/Free/WpfBinding.pdf
-aj
Imaginez ce cas, un rectangle que nous voulons que sa hauteur est toujours égale à sa largeur, un carré disons. Nous pouvons faire cela en utilisant le nom de l'élément
<Rectangle Fill="Red" Name="rectangle"
Height="100" Stroke="Black"
Canvas.Top="100" Canvas.Left="100"
Width="{Binding ElementName=rectangle,
Path=Height}"/>
Mais dans ce cas ci-dessus, nous sommes dans l'obligation d'indiquer le nom de l'objet de liaison, à savoir le rectangle. On peut atteindre le même but différemment à l'aide de la RelativeSource
<Rectangle Fill="Red" Height="100"
Stroke="Black"
Width="{Binding RelativeSource={RelativeSource Self},
Path=Height}"/>
Pour ce cas, nous ne sommes pas obligés de mentionner le nom de l'objet de liaison et la Largeur sera toujours égale à la Hauteur à chaque fois que la modification de la hauteur.
Si vous voulez paramètre de la Largeur à la moitié de la hauteur, alors vous pouvez le faire en ajoutant un convertisseur pour la Liaison d'extension de balisage. Imaginons un autre cas maintenant:
<TextBlock Width="{Binding RelativeSource={RelativeSource Self},
Path=Parent.ActualWidth}"/>
Le cas ci-dessus est utilisé pour attacher une propriété donnée d'un élément donné à l'un de ses parent direct que cet élément contient une propriété qui est appelé Parent. Ce qui nous amène à une autre source par rapport au mode qui est le FindAncestor.