2010-05-12 5 views
8

J'utilise ce style pour toutes mes étiquettessource de mise à jour avec TemplateBinding

<Style TargetType="Label" x:Key="LabelStyle"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Label"> 
        <StackPanel Orientation="Horizontal" > 
         <TextBox Loaded="MyTextBlock_Loaded" x:Name="EditControl" Visibility="Collapsed" Text="{TemplateBinding Tag}" /> 
         <Label Content="{TemplateBinding Content}" Grid.Column="1" Grid.Row="1"> 
         </Label> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

et mon exemple d'étiquette

<Label Grid.Column="0" Grid.Row="0" Content="Photo" Style="{StaticResource LabelStyle}" Tag="{Binding fieldsCode.firstName, UpdateSourceTrigger=PropertyChanged}"/> 

Mais je pense que TemplateBiding ne supporte pas la mise à jour de la propriété. Comment résoudre ce problème

Répondre

1

Si vous souhaitez une liaison unidirectionnelle depuis le ControlTemplate vers une propriété de son parent modèle, utilisez {TemplateBinding}. Pour tous les autres scénarios utilisent {Binding} au lieu:

<TextBox Loaded="MyTextBlock_Loaded" x:Name="EditControl" Visibility="Collapsed" Text="{Binding Tag, Mode=TwoWay}" />

+0

{liaison Tag, RelativeSource = {RelativeSource TemplatedParent}, mode = TwoWay} –

27

Essayez ceci pour deux voies de liaison

Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag, Mode=TwoWay}" 
+0

Veer il fonctionne comme une liaison à sens unique, Dois-je utiliser UpdateSourceTrigger dans TextBox ou dans Label? J'implémente INotifierPropertyChanged dans ma classe quelle propriété j'utilise dans la liaison Label – Polaris

+0

Veer est-il possible que la propriété Tag de Label ne prenne pas en charge la modification des données? – Polaris

+0

@Polaris: Vous venez tout juste de voir UpdateSourceTrigger dans le tag de votre Label, ce qui n'est pas obligatoire. Si cela est nécessaire, il devrait être dans la cible, c'est-à-dire, Textbox, car il est utilisé pour propager les changements de la cible à la source. Par défaut dans la liaison bidirectionnelle (vérifiez ma modification), les modifications de la cible (zone de texte) seront propagées à la source lorsqu'elle perd le focus. Si vous voulez vraiment que les changements soient propagés sur textchange, alors vous devriez ajouter updatesourcetrigger à la zone de texte. – Amsakanna

Questions connexes