2011-01-06 13 views
5

Mam następujące XAML dla przycisku przełączającego:Dlaczego zmiana IsChecked nie jest włączona w tym przełączniku?

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

Ale nieruchomość IsChecked nigdy nie jest aktualizowany po kliknięciu przycisku.

Jeśli używam snoop i zmusić IsChecked True następnie rzuty spust.

+1

Co robi Twoje polecenie? Jeśli usunę twoje polecenia (i po prostu ustawię właściwości zawartości, to działa dobrze. –

Odpowiedz

5

Wypróbowałem twój ToggleButton i działa dobrze. Jedyny problem, jaki widzę, polega na tym, że explicite ustawiasz polecenie. Należy to zrobić za pomocą Setter zamiast (tak jak w przypadku Content), aby nie złamać 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> 

Jeśli nadal jesteś w stanie kliknąć go, chciałbym sprawdzić, czy IsHitTestVisible lub podobna jest ustawiony na False dalszej Visual Tree.

Jeśli chcesz porównać wersję mojej aplikacji testowej, aby sprawdzić, co nie działa, i wysłał go tutaj: http://www.mediafire.com/?ik24ftsfw2wwfwb

+0

argh, nie można uzyskać dostępu - zapora firmy zablokowała go! Dziękuję za pomoc – cjroebuck

1

tylko przypuszczenie, ale usunąć Binding Mode=OneWay i spróbuj ponownie.

+0

dziękuję, ale bez powodzenia .. Czy muszę powiązać coś z własnością IsChecked, aby to zadziałało? – cjroebuck

2

Naprawiono go parametryzacja moje polecenie, wiązanie się z nowej nieruchomości na moim viewmodel i przesuwając polecenie do styl:

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

Po prostu nie kochasz WPF!

Powiązane problemy