绑定按钮IsEnabled到ComboBox选择

时间:2015-02-25 00:38:19

标签: c# wpf xaml

我知道这可以在转换器中完成,但是我想基于ComboBox中选择的特定项目禁用一个按钮,仅使用XAML。

以下内容使用Visibility属性。为什么我尝试使用IsEnabled它不起作用?有什么我想念的吗?如果是这样的话,如果有人可以解释原因,那就太好了。我应该只使用转换器吗?

<ComboBox Name="WidthTypeComboBox" 
    ItemsSource="{Binding Source={StaticResource WidthType}}" 
    SelectedItem="{Binding WidthTypeSelected}" />

使用:

<Button Content="Map Channels" Command="{Binding ShowChannelAction}">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedIndex, 
                    ElementName=WidthTypeComboBox}" Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

不起作用:

<Button Content="Map Channels" Command="{Binding ShowChannelAction}">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedIndex, 
                    ElementName=WidthTypeComboBox}" Value="0">
                    <Setter Property="IsEnabled" Value="True" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

1 个答案:

答案 0 :(得分:0)

我实际上不确定第一个是如何工作的。这取决于您为按钮上的属性设置的内容。通常,您需要样式中的默认setter并删除按钮本地设置的任何IsEnabled值:

<Style TargetType="Button">
    <Setter Property="IsEnabled" Value="False" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding SelectedIndex, 
            ElementName=WidthTypeComboBox}" Value="0">
            <Setter Property="IsEnabled" Value="True" />
        </DataTrigger>
    </Style.Triggers>
</Style>

归结为属性值设置的优先级。例如,在本地设置的属性值覆盖样式setter / triggers。 This article通过一些示例解释了依赖属性优先级。