使用3个多数据触发器控制按钮的启用状态

时间:2016-03-18 09:15:02

标签: c# wpf xaml

我想根据以下条件控制按钮IsEnabled状态。该按钮仅在以下情况下处于活动状态:

  1. 选中复选框1或复选框2。
  2. 列表框包含至少1个列表项。
  3. 我的问题是:我必须使用单独的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>
    

1 个答案:

答案 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>