2011-01-06 12 views
5

Ich habe folgende XAML für einen Umschaltknopf:Warum ändert sich IsChecked nicht bei dieser Umschalttaste?

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

Aber die IsChecked Eigenschaft nie aktualisiert wird, wenn die Schaltfläche klicken.

Wenn ich Snoop und zwingen den IsChecked auf True dann die Trigger-Kicks in.

+1

Was macht Ihr Befehl? Wenn ich Ihre Befehle entfernen (und nur die Eigenschaften des Inhalts einstellen, funktioniert es gut. –

Antwort

5

Ich habe versucht, Ihre ToggleButton und es funktioniert gut. Das einzige Problem, das ich sehe, ist, dass Sie Command explizit setzen. Es sollte mit einer Setter statt (wie Sie mit Content getan haben), um die Trigger nicht zu brechen.

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

Wenn Sie noch nicht in der Lage sind, es zu klicken, würde ich prüfen, ob IsHitTestVisible oder ähnlich wie False weiter oben in der Baumstruktur festgelegt ist.

Wenn Sie Ihre Version auf meinem Test-App zu vergleichen, um zu sehen, was, nicht funktioniert ich es hier hochgeladen: http://www.mediafire.com/?ik24ftsfw2wwfwb

+0

argh, kann nicht zugreifen - Firmen-Firewall blockiert es! Danke für Ihre Hilfe – cjroebuck

1

nur eine Vermutung, aber entfernen Sie die Bindung Mode=OneWay und versuchen Sie es erneut.

+0

danke, aber kein Glück .. Muss ich etwas an die IsChecked-Eigenschaft binden, um dies funktioniert – cjroebuck

2

es behoben, durch meinen Befehl Parametrisierung, auf meinem Viewmodel auf eine neue Eigenschaft Bindung und in den Befehls bewegt die Art:

Lieben Sie nicht einfach WPF manchmal!

Verwandte Themen