2011-01-06 44 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財產永遠不會被更新。

如果我使用窺探並強制向器isChecked真則觸發踢。

+1

你的命令做什麼?如果我刪除你的命令(並設置內容屬性,它工作正常。 – 2011-01-06 18:23:35

回答

5

我試過你的ToggleButton,它工作正常。我看到的唯一問題是你明確地設置了Command。它應該使用Setter來代替(與您使用Content一樣),以便不打破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> 

如果您仍然無法點擊它,我會檢查是否IsHitTestVisible或類似設置爲False進一步上漲的可視化樹。

如果你想你的版本進行比較,以我的測試應用程序,看看有什麼不工作,我上傳它在這裏:http://www.mediafire.com/?ik24ftsfw2wwfwb

+0

ARGH,無法訪問 - 公司防火牆阻止它!儘管感謝您的幫助 – cjroebuck 2011-01-06 19:08:56

1

只是一個猜測,但取消綁定Mode=OneWay,然後再試一次。

+0

謝謝,但沒有運氣..我需要綁定的東西到IsChecked屬性得到這個工作? – cjroebuck 2011-01-06 17:54:50

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!