具有多个 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
。
当然,最后两个选项只有在您首先设置了绑定的正确视图模型时才有效(我强烈建议您这样做,如果您还没有的话)。
我只想在所有指定的 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
。
当然,最后两个选项只有在您首先设置了绑定的正确视图模型时才有效(我强烈建议您这样做,如果您还没有的话)。