DataTrigger无法使用CheckBox

pet*_*ete 2 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>
Run Code Online (Sandbox Code Playgroud)

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

Viv*_*Viv 7

那么你需要在IsChecked里面移动Binding 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>
Run Code Online (Sandbox Code Playgroud)

注意:

请记住,这样做Binding只适用于DataTrigger不评估为"真"的情况.因此,如果您的Manufacturer属性是"ZIV"或"Landis + Gyr",那么您的Integrated属性即使使用TwoWay绑定也不会看到任何CheckBox更新,因为它只是没有被使用.