我想根据以下条件控制按钮IsEnabled状态。该按钮仅在以下情况下处于活动状态:
我的问题是:我必须使用单独的MultiDataTrigger来实现此行为。当我将代码添加到第一个多数据触发器时,它不起作用。即使列表框没有任何项目,该按钮也会启用。
所以我需要一个解决方案。是否有任何可能的方法来包含第3个多数据触发条件以及2个条件,以便可以保存几行代码?
提前致谢。请检查下面的代码。
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=Checkbox1, Path=IsChecked}" Value="False" />
<Condition Binding="{Binding ElementName=Checkbox2, Path=IsChecked}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=ListBox, Path=Items.Count}" Value="0" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
答案 0 :(得分:1)
当所有条件都为真时,MultiTrigger应用关联的setter或action(二进制AND操作)。
如前所述,触发器将触发所有条件,这就是为什么当你把所有条件放在一起时它没有工作的原因。生成OR(不实现IMultiValueConverter)的最简单方法是使用多个数据触发器(这意味着二进制OR操作)。
如果您打算保存代码行,可以使用DataTrigger而不是MultiDataTrigger。
<DataTrigger Binding="{Binding ElementName=listView, Path=Items.Count }" Value="0">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>