web-dev-qa-db-fra.com

Qu'est-ce que le template binding vs binding?

Je ne pouvais pas comprendre BorderThickness="{TemplateBinding BorderThickness}. Voici le code:

<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
    <Border Padding="{TemplateBinding Padding}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            SnapsToDevicePixels="True">
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
</ControlTemplate>

Veuillez également expliquer d'autres types de reliure.

109
prjndhi

TemplateBinding est utilisé pour la liaison aux propriétés de l'élément dans la définition du modèle. Dans votre exemple, vous auriez pu écrire

 <Border Padding="{Binding Padding}" ...>

signifie lier la propriété de remplissage de la bordure à la propriété de ... quoi? Vous voudriez dire, "propriété de remplissage du contrôle que cela le modèle est utilisé pour. " Vous ne pouvez pas lui donner un nom parce que vous ne connaissez pas le x: Nom du contrôle pour le moment (même si vous le saviez, cela ne fonctionnerait pas car son nom est différent). Cependant, vous pouvez le faire en définissant une source relative

<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>

ou utilisez TemplateBinding, qui est un raccourci (*) pour ce qui précède

<Border Padding="{TemplateBinding Padding}" ...>

(*) En plus d'être moins explicite dans ces scénarios de templates, TemplateBinding présente quelques différences par rapport à une liaison classique:

  • Il est évalué au moment de la compilation. (Si, par exemple, la propriété Padding n'existait pas, vous obtiendrez une erreur de compilation. Cependant, si vous utilisiez une liaison avec TemplatedParent, vous ne verriez l'erreur qu'au moment de l'exécution.)
  • C'est toujours une liaison à sens unique.
  • Pour cela, les propriétés source et cible doivent être des propriétés de dépendance .
  • Il a beaucoup moins de fonctionnalités (pas de StringFormat, Delay, IsAsync, etc. Voir les propriétés de Binding vs TemplateBindingExtention ).
184
Eren Ersönmez

Une image vaut 1000 mots. Dans ce cas, il s’agit d’une vidéo de 7 minutes: https://www.youtube.com/watch?v=z-0TZR-7xLI

EDIT: Exemple:

  • Un Button a une propriété par défaut ControlTemplate et une propriété Height
  • Vous écrasez la propriété ControlTemplate d'une Button en écrivant votre propre (par exemple, vous voulez créer un bouton ressemblant à Ellipse au lieu de Rectangle à regarder)
  • Après avoir créé un Ellipse dans votre nouveau ControlTemplate, vous souhaitez que Ellipse ait la même taille que la propriété Height du bouton original.
  • Donc vous utilisez TemplateBinding pour référencer ButtonHeight sans le nommer enter image description here
48
Bad

Eren Ersönmenz l'a déjà très bien expliqué, mais j'aimerais lui donner une autre perspective pour mieux comprendre le concept.

Dans WPF, chaque contrôle est plus ou moins détaché de sa présentation. Vous pouvez toujours changer le modèle de contrôles et le rendre complètement différent. Un bouton fonctionne comme prévu avec un ControlTemplate composé uniquement de Rectangle par exemple. Maintenant, il est parfois nécessaire que ControlTemplate utilise réellement les propriétés de la partie logique d'un contrôle. Et c’est ce à quoi TemplateBinding correspond, car il indique simplement à ControlTemplate "Utiliser cette propriété du contrôle que nous donnons à la présentation visuelle". Un bon exemple est la propriété Background sur chaque contrôle, elle n’a aucune signification en elle-même, elle tire son sens de TemplateBinding -le en contrôle enfant dans le ControlTemplate.

La liaison seule est très bien décrite dans le MSDN . This est un très bel aide-mémoire accroché sur mon mur juste à côté de moi. Cela donne un bon aperçu de toutes les différentes reliures disponibles.

32
dowhilefor

De TemplateBinding Markup Extension , TemplateBinding lie la valeur d'une propriété d'un modèle de contrôle à la valeur d'une autre propriété exposée du contrôle basé sur un modèle. En d'autres termes, il s'agit de valeurs de liaison dans un modèle.

Binding connecte une propriété des cibles de liaison et des sources de données.

6
Zabavsky