web-dev-qa-db-fra.com

Datatriggège de style WPF avec liaison à DataContext ne fonctionne pas

J'ai une zone de texte avec un style qui a un datrigrouting qui change le texte, comme celui-ci:

<Grid>
    <TextBlock Text="Foo">
        <TextBlock.Style>
            <Style BasedOn="{StaticResource TextStyle}" TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding MyBool}" Value="True">
                        <Setter Property="Text" Value="Bar"/>
                    </DataTrigger>
                 </Style.Triggers>
             </Style>
         </TextBlock.Style>
     </TextBlock>
</Grid>

Mais cela ne fonctionne pas, le texte ne change jamais en "bar". J'ai testé à l'aide d'un autre texte de texte avec texte = "{mybool}}" et ce texte passe de "false" à "vrai". Snoop ne révèle aucune erreur que je peux voir et il n'y a rien dans la sortie.

Cette question peut sembler être un duplicata de Trigger WPF reliant la propriété MVVM , mais mon code ne semble pas différent de la réponse acceptée là-bas ( http://www.thejoyofcode.com/help_why_cant_i_on_datriggers_with_controls_in_wpf .aspx , section "Utilisation d'un style") de toute manière pertinente. Et en utilisant un fichier de données comme suggéré dans la réponse réelle semble tort car je veux seulement que cela s'applique à un seul texte texte, mais s'il est correct, je ne sais pas comment écrire un DaTatemplate pour cette ...

ÉDITER:

C'est ce que la propriété est liée à ressembler à:

public bool MyBool
{
    get { return _myBool; }
    set
    {
        if (_myBool== value)
            return;

        _myBool= value;
        NotifyPropertyChanged();
    }
}
private bool _myBool;
17
moggizx

Les propriétés de dépendance peuvent être définies de nombreux endroits différents; Inline, animations, coercition, déclencheurs, etc. En tant que tel La liste de la valeur de la propriété de la propriété de dépendance a été créée et que ces dicts changent de remplacement quelles autres modifications. En raison de cet ordre de priorité, nous ne pouvons pas utiliser de Trigger pour mettre à jour une propriété explicitement définie en ligne dans votre XAML. Essayez cela à la place:

<Grid>
    <TextBlock>
        <TextBlock.Style>
            <Style BasedOn="{StaticResource TextStyle}" TargetType="TextBlock">
                <!-- define your default value here -->
                <Setter Property="Text" Value="Foo" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding MyBool}" Value="True">
                        <!-- define your triggered value here -->
                        <Setter Property="Text" Value="Bar" />
                    </DataTrigger>
                 </Style.Triggers>
             </Style>
         </TextBlock.Style>
     </TextBlock>
</Grid>
57
Sheridan