3

我在 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 不起作用。

4

1 回答 1

8

那么你需要将IsCheckedBinding移到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因此,如果您的Manufacturer属性是“ZIV”或“Landis+Gyr”,那么即使没有使用绑定,您的Integrated属性也不会看到任何 CheckBox 更新。TwoWay

于 2013-05-23T08:55:39.663 回答