2012-03-08 1 views
2

업데이트 :이 문제점은 .NET 4.0 (3.5 사용)에서 수정 된 것으로 확인되었습니다.사용자가 IsChecked 바인딩을 사용하여 확인란을 선택하지 않은 이유는 무엇입니까?

동일한 윈도우의 콤보 상자에 특정 값이없는 경우 (확인란이 비활성화되어 있고 선택되어있는 경우) 사용자가 수동으로 설정할 수 있도록 확인란을 사용하려고합니다.

사용자가 상자를 수동으로 선택/선택 취소 할 때까지 완벽하게 작동합니다. 그 후, IsChecked = True 설정자는 콤보 상자의 값이 변경되면 작동을 멈 춥니 다. IsEnabled = False setter는 예상대로 계속 작동합니다.

순수 XAML을 사용할 수 있기를 희망했을 때 코드 숨김에서 일부 논리를 사용해야하는 결과를 초래했습니다.

버그 또는 의도 된 동작인지 알 수 있습니까? 그렇다면 왜?

<CheckBox> 
Some text here 
<CheckBox.Style> 
    <Style TargetType="{x:Type CheckBox}"> 
     <Setter Property="IsChecked" Value="False" /> 
     <Setter Property="IsEnabled" Value="True" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=SelectedValue, ElementName=comboBox1, Mode=OneWay}" Value="Disable Checkbox"> 
       <Setter Property="IsChecked" Value="True" /> 
       <Setter Property="IsEnabled" Value="False" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</CheckBox.Style> 
</CheckBox> 

감사합니다.

+0

아니요 ... –

답변

2

프로젝트에 다른 작업이 있습니다.

<Window x:Class="Test.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Name="Window" 
     SizeToContent="WidthAndHeight"> 
    <StackPanel> 
     <CheckBox> 
      some text here 
      <CheckBox.Style> 
       <Style TargetType="{x:Type CheckBox}"> 
        <Setter Property="IsChecked" Value="False" /> 
        <Setter Property="IsEnabled" Value="True" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=SelectedIndex, ElementName=combo, Mode=OneWay}" Value="2"> 
          <Setter Property="IsChecked" Value="True" /> 
          <Setter Property="IsEnabled" Value="False" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </CheckBox.Style> 
     </CheckBox> 
     <ComboBox Name="combo"> 
      <TextBlock>item 1</TextBlock> 
      <TextBlock>item 2</TextBlock> 
      <TextBlock>item 3</TextBlock> 
      <TextBlock>item 4</TextBlock> 
      <TextBlock>item 5</TextBlock> 
     </ComboBox> 
    </StackPanel> 
</Window> 

그래서 매우 간단합니다 :

나는 다음 시도했다. 목표는 comboBox에서 항목 3이 선택되었을 때 IsEnable 및 IsChecked와 정확히 동일한 값을 설정하는 것입니다.

그리고 매력처럼 작동합니다. 즉 : 사용자가 원하는대로 확인란을 선택/선택 취소하면 comboBox에서 "항목 3"을 선택하면 확인란이 선택되고 비활성화됩니다. 그가 comboBox에서 선택한 항목을 다시 변경하면 확인란의 선택이 해제되어 다시 활성화되며 계속해서 확인란을 선택/해제 할 수 있습니다.

그래서 다른 일이 일어나고 있습니다. 당신이 쓴 것이 효과가 있습니다.

편집 : 귀하의 코멘트에 관해서, 내가 대신 내가 처음 사용되었고, 참으로 문제를 재현 할 수있는 4.0의 3.5 버전 테스트, 그래서 이것은 명확의 4.0 버전에서 수정 된 버그 .넷 프레임 워크.

+0

+1이 솔루션은 SelectedIndex를 사용했으나 SelectedValue는이를 중단해서는 안됩니다. – Paparazzi

+0

이 코드를 사용하여 새 프로젝트를 만들었지 만 여전히 똑같은 효과가 있습니다. IsChecked 상태는 사용자가 확인란을 수동으로 선택/선택 취소 할 때까지 콤보 상자의 값에 올바르게 바인딩됩니다. 그 후, IsChecked 상태는 콤보 박스의 값에 관계없이 자동으로 변경되지 않습니다. WPF 3.5를 사용하면 차이가 있습니다. – Rich

+0

아, 네, 정말로 .net 3.5에서이 문제를 재현 할 수 있습니다.이 버그는 분명히 4.0 버전으로 수정되었습니다. (처음에는 테스트 프로젝트에 사용하고있었습니다) – David

관련 문제