2014-07-07 3 views
1

J'ai une fenêtre avec un TextBlock. Ce TextBlock doit montrer la valeur "R" si la valeur binded est 0 ou "M" si la valeur est binded 1.WPF XAML - DataTriggers ou ValueConverters? Meilleure pratique

j'ai deux possibilités:

approche ValueConverter

<TextBlock Binding="{Binding Path=Value, Converter={StaticResource valConverter}}"/> 

Lorsque valConverter est une classe qui retourne IValueConverter "M" ou "R" si la valeur est respectivement égal à 0 ou 1.

[omitted class] 

approche DataTrigger

<TextBlock> 
    <TextBlock.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Value}" Value="0"> 
        <Setter Property="TextBlock.Text" Value="R"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Value}" Value="1"> 
        <Setter Property="TextBlock.Text" Value="M"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Selon vous, quelle est la meilleure approche?

+2

double possible de [WPF déclenche VS Converter] (http://stackoverflow.com/questions/19466354/wpf-triggers-vs- convertisseur) –

+0

duplication possible de [Devrais-je utiliser le convertisseur WPF ou le déclencheur?] (http://stackoverflow.com/questions/11152313/should-i-use-wpf-converter-or-trigger/11156189#11156189) – akjoshi

Répondre

2

Les convertisseurs sont les meilleurs dans ce scénario. Comme le nom l'indique, le convertisseur convertit le type. Dans ce cas, vous voulez convertir int en Char, donc les convertisseurs sont bien adaptés. Pour plus d'informations: ConverterPerformance

4

Dans la plupart des scénarios, les déclencheurs peuvent effectuer le même travail que n'importe quel convertisseur, mais Converters peut avoir une logique personnalisée/métier.

Une limitation de Triggers est que Setters dans votre DataTriggers peut uniquement modifier les propriétés de vos éléments d'interface utilisateur; donc, vous ne pouvez pas mettre à jour votre propriété ViewModels avec des déclencheurs, c'est là que gagne Converters, rappelez-vous la méthode ConvertBack.

Donc en bref Triggers ne peut effectuer des opérations OneWay alors que Converters peut effectuer des opérations TwoWay

+1

Si vous copier une réponse à une question antérieure, puis pls. fournir un lien vers la question originale, sera plus utile pour tout le monde. http://stackoverflow.com/a/11156189/45382 – akjoshi