2010-10-26 26 views
0

J'ai un simple bloc de texte avec une étiquette et une zone de texte comme contenu. Je voudrais lier la propriété IsEnabled du bloc de texte à une propriété sur mon modèle de vue. Pour quelque raison que ce soit, l'étiquette et la zone de texte restent désactivées même si la propriété IsEnabled change correctement sur le modèle de vue.Quel est le problème avec la liaison TextBlock IsEnabled?

Quelqu'un sait ce qui se passe ici?

Cela ne fonctionne pas:

<TextBlock IsEnabled="{Binding Path=IsEnabledProperty}"> 
    <Label Content="Test"/> 
    <TextBox Text="blah"/> 
</TextBlock> 

Cela fonctionne très bien:

<TextBlock> 
    <Label IsEnabled="{Binding Path=IsEnabledProperty}" Content="Test"/> 
    <TextBox IsEnabled="{Binding Path=IsEnabledProperty}" Text="blah"/> 
</TextBlock> 

Est-il juste une mauvaise idée d'utiliser TextBlock comme ça?

Répondre

4

Oui, c'est une mauvaise idée. Lorsque vous placez des objets non-chaîne dans la propriété Text, ils sont utilisés comme éléments de contenu, comme dans un FlowDocument, et ne sont donc pas interactifs comme les FrameworkElements normaux.

1

Avez-vous essayé un StackPanel à la place?

<StackPanel Orientation="Horizontal" IsEnabled="{Binding Path=IsEnabledProperty}"> 
    <Label Content="Test"/> 
    <TextBox Text="blah"/> 
    </StackPanel> 

Votre IsEnabledProperty est-elle une propriété de dépendance?

+0

Ouais. Empilez le panneau dans le bon sens. Je ne suis pas sûr d'où j'ai vu TextBlock utilisé de cette façon à l'origine!? Il est temps de casser une mauvaise habitude. –

0

Etes-vous sûr que vous déclenche l'événement PropertyChanged pour votre propriété IsEnableProperty lorsque vous le mettez à jour dans viewModel?