2011-01-06 5 views
5

나는 토글 버튼에 대한 다음 XAML 있습니다토글 버튼에서 IsChecked가 변경되지 않는 이유는 무엇입니까?

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

을하지만 버튼을 클릭 할 때 IsChecked 속성이 업데이트되지 없구요.

나는 스눕를 사용에서 다음 True로 트리거 킥을의 IsChecked을 강제로.

+1

명령은 무엇을 수행합니까? 내가 명령을 제거하고 Content 속성 만 설정하면 제대로 작동합니다. –

답변

5

ToggleButton을 시도했지만 정상적으로 작동합니다. 내가보기에는 커맨드를 명시 적으로 설정하는 것이 유일한 문제입니다. 너 (Content과 같이) 대신 Trigger을 깨지 말고 완료해야합니다. 당신은 아직도 그것을 클릭 할 수없는 경우 IsHitTestVisible 또는 유사한 더욱 시각적 트리까지 False로 설정되어있는 경우

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

, 내가 확인 것입니다.

당신이 작동하지 않는 것을 볼 수있는 내 테스트 응용 프로그램에 버전을 비교하려면

, 난 여기가 업로드 : http://www.mediafire.com/?ik24ftsfw2wwfwb

+0

액세스가 불가능합니다 - 회사 방화벽이 차단했습니다. 귀하의 도움에 감사드립니다. – cjroebuck

1

그냥 추측하지만, 바인딩 Mode=OneWay를 제거하고 다시 시도하십시오.

+0

감사하지만 운이 없습니다.이 작업을 수행하려면 IsChecked 속성에 뭔가를 바인딩해야합니까? – cjroebuck

2

, 내 명령을 변수 설정 내 뷰 모델에 새로운 속성에 바인딩으로 명령을 이동하여 고정 스타일 :

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

가끔은 WPF를 사랑하지 마십시오!

관련 문제