0 votes

WPF : Personnaliser un modèle de données à l'aide d'une propriété de liaison.

Je suis très novice en matière de WPF. J'ai une ListBox où je veux définir un modèle pour un élément (je l'ai appelé Personne). Un TextBlock doit être utilisé. La personne doit avoir des propriétés publiques : "Foreground" et "IsOnline". Si "IsOnline" est vrai, j'utilise la propriété "Foreground" de la personne, sinon "Gray". C'est tout. Mon premier modèle est le suivant :

<DataTemplate x:Key="UnselectedPersonTemplate" DataType="{x:Type o:Person}">
    <TextBlock Text="{Binding Path=Name}" Foreground="{Binding Path=Foreground}" Margin="1">
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=IsOnline}" Value="False">
                <Setter Property="TextBlock.Foreground" Value="Gray" />
            </DataTrigger>
        </DataTemplate.Triggers>
</DataTemplate>

Bien sûr, ça ne marche pas. Il n'y a pas d'exception, mais pas non plus le résultat attendu. J'ai ensuite essayé d'utiliser le Trigger pour le TextBlock, mais il y aura une exception, car je ne peux pas utiliser les DataTriggers (seulement les EventTriggers) pour cela.

Merci pour tout conseil ! :)

2voto

idursun Points 3648

Donnez votre TextBlock un nom et définir TargetName de ce nom.

<DataTemplate x:Key="UnselectedPersonTemplate" DataType="{x:Type o:Person}">
    <TextBlock x:Name="tb" Text="{Binding Path=Name}" 
          Foreground="{Binding Path=Foreground}" Margin="1" />
    <DataTemplate.Triggers>
       <DataTrigger Binding="{Binding Path=IsOnline}" Value="False">
          <Setter TargetName="tb" Property="Foreground" Value="Gray" />
       </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X