DataTrigger无法处理CheckBox

时间:2013-05-23 06:40:13

标签: wpf datatrigger

我有一个WPF格式的以下DataTrigger:

<CheckBox IsChecked="{Binding ConcentratorViewModel.Integrated}">
    <CheckBox.Style>
        <Style TargetType="{x:Type CheckBox}">
            <Setter Property="Margin" Value="0,10,0,0"/>
            <Setter Property="Width" Value="20"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <!--<Setter Property="IsEnabled" Value="False"/>-->
            <!--<Setter Property="IsChecked" Value="False"/>-->

             <Style.Triggers>
                 <DataTrigger Binding="{Binding ConcentratorViewModel.Manufacturer}" Value="ZIV">
                     <Setter Property="Background" Value="Red"/>
                     <Setter Property="IsChecked" Value="True"/>
                 </DataTrigger>

                 <DataTrigger Binding="{Binding ConcentratorViewModel.Manufacturer}" Value="Landis+Gyr">
                     <Setter Property="IsChecked" Value="False"/>                                    
                 </DataTrigger>
            </Style.Triggers>
        </Style>
    </CheckBox.Style>
</CheckBox>

CheckBox必须选中或取消选中,具体取决于所选的制造商。我添加了一个转换器来查看触发器上的值,这是正确的。我还添加了Background属性并且它正确更改,但IsChecked不起作用。

1 个答案:

答案 0 :(得分:7)

您需要在IsChecked内移动Style绑定。直接在Checkbox上设置它会使其优先,触发器不能更改该值。

类似于:

<CheckBox>
  <CheckBox.Style>
    <Style TargetType="{x:Type CheckBox}">
      <Setter Property="Margin"
              Value="0,10,0,0" />
      <Setter Property="Width"
              Value="20" />
      <Setter Property="VerticalAlignment"
              Value="Center" />
      <Setter Property="IsChecked"
              Value="{Binding ConcentratorViewModel.Integrated}" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding ConcentratorViewModel.Manufacturer}"
                     Value="ZIV">
          <Setter Property="Background"
                  Value="Red" />
          <Setter Property="IsChecked"
                  Value="True" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ConcentratorViewModel.Manufacturer}"
                     Value="Landis+Gyr">
          <Setter Property="IsChecked"
                  Value="False" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </CheckBox.Style>
</CheckBox>

注意:

请记住,Binding仅适用于DataTrigger未评估为“True”的情况。因此,如果您的Manufacturer属性为“ZIV”或“Landis + Gyr”,则即使使用Integrated绑定,您的TwoWay属性也不会看到任何CheckBox更新正在使用。