我有一个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不起作用.
那么你需要在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更新,因为它只是没有被使用.
| 归档时间: |
|
| 查看次数: |
3885 次 |
| 最近记录: |