【问题标题】:MultiDataTrigger with multiple ComboBoxes WPFMultiDataTrigger 与多个 ComboBoxes WPF
【发布时间】:2021-07-22 06:23:14
【问题描述】:

我只想在所有指定的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>

我将不胜感激!

【问题讨论】:

    标签: c# wpf combobox multidatatrigger


    【解决方案1】:

    MultiDataTrigger 需要 所有 条件为真才能生效。 IE。它相当于逻辑与。

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

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

    例如:

    <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 属性,并根据各种 ComboBox 控件的绑定 SelectedValue 属性进行设置。

    另一种选择是使用MultiBinding 将绑定到ComboBox.SelectedValue 属性的五个视图模型属性与实现逻辑的IMultiValueConverter 绑定。

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

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2015-11-06
      • 2020-05-09
      • 2014-01-26
      • 1970-01-01
      • 2010-10-19
      • 2019-07-14
      • 1970-01-01
      • 2014-11-07
      相关资源
      最近更新 更多