2011-01-06 21 views
5

Tengo el siguiente XAML para un botón de activación:¿Por qué IsChecked no cambia en este botón de alternar?

<ToggleButton Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2" Command="{Binding DataContext.SelectAllCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"> 
    <ToggleButton.Style> 
    <Style TargetType="{x:Type ToggleButton}"> 
     <Setter Property="Content" Value="Select All"/> 
     <Style.Triggers> 
      <Trigger Property="IsChecked" Value="True"> 
       <Setter Property="Content" Value="Select None"/> 
       <Setter Property="Command" Value="{Binding DataContext.SelectNoneCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/> 
      </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

Pero la propiedad IsChecked no se actualiza cuando se hace clic en el botón.

Si uso Snoop y la fuerza de la verdad, entonces IsChecked a las patadas de disparo en.

+1

¿Qué hace su comando? Si elimino sus Comandos (y simplemente configuro las propiedades del Contenido, funciona bien. –

Respuesta

5

He probado su ToggleButton y está funcionando bien. El único problema que veo con esto es que estableces el comando explícitamente. Se debe hacer con un Setter en su lugar (como lo hizo con Content) para no romper el Trigger.

<ToggleButton Name="toggleButton" Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2"> 
    <ToggleButton.Style> 
     <Style TargetType="{x:Type ToggleButton}"> 
      <Setter Property="Content" Value="Select All"/> 
      <Setter Property="Command" 
        Value="{Binding DataContext.SelectAllCommand, 
            Mode=OneWay, 
            RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Content" Value="Select None"/> 
        <Setter Property="Command" Value="{Binding DataContext.SelectNoneCommand, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

Si aún no puedes hacer clic en él, me gustaría comprobar si IsHitTestVisible o similares se establece en False más arriba en el árbol visual.

Si desea comparar la versión de mi aplicación de prueba para ver lo que no funciona, he subido aquí: http://www.mediafire.com/?ik24ftsfw2wwfwb

+0

argh, no puedo acceder - ¡el cortafuegos de la empresa lo bloqueó! Gracias por tu ayuda – cjroebuck

1

Sólo una conjetura, pero quito el Mode=OneWay Encuadernación y vuelve a intentarlo.

+0

gracias pero no tuve suerte ... ¿Debo vincular algo a la propiedad IsChecked para que funcione? – cjroebuck

2

arreglaron mediante la parametrización de mi mando, la unión a una nueva propiedad en mi modelo de vista y moviendo comando en el estilo:

   <ToggleButton Margin="0,3" Grid.Row="3" Grid.ColumnSpan="2" IsThreeState="False" 
          IsChecked="{Binding DataContext.IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"> 
        <ToggleButton.Style> 
         <Style TargetType="{x:Type ToggleButton}"> 
          <Setter Property="Content" Value="Select All"/> 
          <Setter Property="Command" Value="{Binding DataContext.SelectAllCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>         
          <Style.Triggers> 
           <Trigger Property="IsChecked" Value="True"> 
            <Setter Property="Content" Value="Select None"/>         
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
       </ToggleButton> 

¡No acaba de amar WPF a veces!

Cuestiones relacionadas