首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个MultiDataTrigger WPF的ComboBoxes

具有多个MultiDataTrigger WPF的ComboBoxes
EN

Stack Overflow用户
提问于 2021-04-28 21:12:41
回答 1查看 213关注 0票数 1

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

这是我的密码

代码语言:javascript
复制
<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>

我很感激你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 21:40:36

MultiDataTrigger要求所有条件都为真才能生效。也就是说,它相当于一个逻辑和。

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

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

例如:

代码语言:javascript
复制
<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绑定。

当然,这最后两个选项只有在您已经建立了一个正确的视图模型并在一开始就设置了绑定(如果您还没有这样做的话,我强烈建议这样做)时才能起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67307958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档