2010-05-12 9 views
8

używam tego stylu dla wszystkich moich etykietAktualizacja źródło z 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> 

i mój przykładowy etykiecie

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

Ale czuję, że TemplateBiding nie obsługuje aktualizację nieruchomości. W jaki sposób rozwiązać ten problem:

Odpowiedz

1

Jeśli chcesz jednostronne wiązanie z obiektu ControlTemplate do właściwości jego obiektu macierzystego z szablonem, użyj {TemplateBinding}. Na wszystkie inne scenariusze korzystania {Binding} zamiast:

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

+0

{Binding Tag, RelativeSource = {RelativeSource TemplatedParent} Mode = TwoWay} –

27

Wypróbuj za wiązanie

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

Veera to dwukierunkowy działa jak jeden sposób wiązania, Czy muszę używać UpdateSourceTrigger w TextBox lub w Label? Zaimplementowałem INotifierPropertyChanged w mojej klasie, której właściwości używam w związku z etykietą – Polaris

+0

. Czy jest możliwe, że zmienna Tag zmienia etykietę, która nie obsługuje danych? – Polaris

+0

@Polaris: Właśnie zobaczyłem UpdateSourceTrigger w tagu etykiety, który nie jest wymagany. Jeśli w ogóle jest wymagany, powinien znajdować się w Target, tj. Textbox, ponieważ służy do propagowania zmian celu do źródła. Domyślnie w wiązaniu dwukierunkowym (sprawdź moją edycję), zmiany celu (pola tekstowego) będą propagowane do źródła, gdy stracą fokus. Jeśli naprawdę chcesz, aby zmiany były propagowane w trakcie zmiany tekstu, to zamiast tego dodaj aktualizacje do modułu tekstowego. – Amsakanna