2011-06-02 10 views
5

En mi aplicación, tengo un TextBox que quiero habilitar/deshabilitar en base a una enumeración en mi contexto de datos. La enumeración tiene tres valores (Cualquiera, Yo, Alguien) y quiero habilitar el Cuadro de texto cuando se establece el valor "Alguien". Puedo hackear una solución estableciendo el valor en reversa (ver a continuación). Sin embargo, ¿alguien puede explicar por qué la primera solución no funcionó?¿Por qué no puedo usar DataTrigger para establecer TextBox.IsEnabled = True?

Esto no funciona ...

<TextBox Text="{Binding ModifiedUser, UpdateSourceTrigger=PropertyChanged}" 
     IsEnabled="False"> 
    <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ModifiedBy}" 
          Value="Someone"> 
        <Setter Property="IsEnabled" 
          Value="True" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

Curiosamente, este código hace trabajo.

<TextBox Text="{Binding ModifiedUser, UpdateSourceTrigger=PropertyChanged}"> 
    <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ModifiedBy}" 
          Value="Anyone"> 
        <Setter Property="IsEnabled" 
          Value="False" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding ModifiedBy}" 
          Value="Me"> 
        <Setter Property="IsEnabled" 
          Value="False" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

Respuesta

14

tiene que establecer el isEnabled inicial en su estilo también. de lo contrario, su IsEnabled "local" = falso siempre ganará.

cambia tu estilo y funcionará.

<TextBox Text="{Binding ModifiedUser, UpdateSourceTrigger=PropertyChanged}"> 
<TextBox.Style> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="IsEnabled" Value="False" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ModifiedBy}" 
         Value="Someone"> 
       <Setter Property="IsEnabled" 
         Value="True" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</TextBox.Style> 

+0

Gracias! Sabía que me estaba perdiendo algo – Nescio

+1

Todays lesson to me :-) – dba

Cuestiones relacionadas