具有多个 ComboBoxes WPF 的 MultiDataTrigger

MultiDataTrigger with multiple ComboBoxes WPF

我只想在所有指定的 ComboBoxes 都有值时启用按钮。但是,只要我添加第二个条件,按钮就会从一开始就启用

这是我的代码

<Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=SensorPartNumberComboBox, Path=SelectedValue}" Value="{x:Null}"/>
                        <Condition Binding="{Binding ElementName=SensorTypeComboBox, Path=SelectedValue}" Value="{x:Null}"/>
                        <Condition Binding="{Binding ElementName=SensorBrandNameComboBox, Path=SelectedValue}" Value="{x:Null}"/>
                        <Condition Binding="{Binding ElementName=DimmingProtocolComboBox, Path=SelectedValue}" Value="{x:Null}"/>
                        <Condition Binding="{Binding ElementName=Wired_WirelessComboBox, Path=SelectedValue}" Value="{x:Null}"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="IsEnabled" Value="False"/>
                </MultiDataTrigger>
 </Style.Triggers>

如有任何帮助,我将不胜感激!

MultiDataTrigger 需要 所有 的条件才能生效。 IE。它等同于逻辑与。

在您的示例中,如果 any 值不为空,触发器将不会生效,按钮将保持启用状态。

对于逻辑或,不要使用 MultiDataTrigger,只需使用多个 DataTrigger。如果任何触发器的任何条件为真,则该触发器将生效,优先于样式中 属性 的默认 setter。

例如:

<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=SensorPartNumberComboBox, Path=SelectedValue}" Value="{x:Null}">
        <Setter Property="IsEnabled" Value="False"/>
    <DataTrigger/>
    <DataTrigger Binding="{Binding ElementName=SensorTypeComboBox, Path=SelectedValue}" Value="{x:Null}">
        <Setter Property="IsEnabled" Value="False"/>
    <DataTrigger/>
    <DataTrigger Binding="{Binding ElementName=SensorBrandNameComboBox, Path=SelectedValue}" Value="{x:Null}">
        <Setter Property="IsEnabled" Value="False"/>
    <DataTrigger/>
    <DataTrigger Binding="{Binding ElementName=DimmingProtocolComboBox, Path=SelectedValue}" Value="{x:Null}">
        <Setter Property="IsEnabled" Value="False"/>
    <DataTrigger/>
    <DataTrigger Binding="{Binding ElementName=Wired_WirelessComboBox, Path=SelectedValue}" Value="{x:Null}">
        <Setter Property="IsEnabled" Value="False"/>
    <DataTrigger/>
 </Style.Triggers>

或者,您可以考虑将逻辑放在您的视图模型中,绑定到一个 bool 属性,并根据绑定的 SelectedValue 属性设置各种 ComboBox 控件。

另一种替代方法是使用 MultiBinding 绑定绑定到 ComboBox.SelectedValue 属性的五个视图模型属性,并使用实现逻辑的 IMultiValueConverter

当然,最后两个选项只有在您首先设置了绑定的正确视图模型时才有效(我强烈建议您这样做,如果您还没有的话)。