2011-01-06 14 views
5

Ho il seguente codice XAML per un interruttore:Perché IsChecked non cambia su questo pulsante di attivazione/disattivazione?

<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> 

Ma la proprietà IsChecked non viene aggiornata quando si fa clic sul pulsante.

Se uso Snoop e forzare l'IsChecked True poi i calci di trigger in.

+1

Cosa fa il tuo comando? Se rimuovo i vostri comandi (e impostate semplicemente le proprietà del contenuto, funziona bene. –

risposta

5

ho cercato il tuo ToggleButton e sta lavorando bene. L'unico problema che vedo è che imposti il ​​comando esplicitamente. Dovrebbe essere fatto con un Setter invece (come hai fatto con Content) per non rompere il 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> 

Se siete ancora in grado di Clic su di esso, mi piacerebbe verificare se IsHitTestVisible o simile è impostato su False più in alto di Visual Tree.

Se si desidera confrontare la versione per la mia prova app per vedere ciò che non funziona, ho caricato qui: http://www.mediafire.com/?ik24ftsfw2wwfwb

+0

argh, non posso accedere - firewall aziendale lo ha bloccato! Grazie per il tuo aiuto – cjroebuck

1

Solo una supposizione, ma rimuovere l'associazione Mode=OneWay e riprovare.

+0

grazie ma senza fortuna .. Devo legare qualcosa alla proprietà IsChecked per farlo funzionare? – cjroebuck

2

è stato risolto da parametrizzare il mio comando, legandosi a una nuova proprietà sul mio ViewModel e lo spostamento di comando in lo stile:

   <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> 

non basta l'amore WPF volte!

Problemi correlati