C# 绑定按钮已启用到组合框选择

C# 绑定按钮已启用到组合框选择,c#,wpf,xaml,C#,Wpf,Xaml,我知道这可以在转换器中完成,但我想基于组合框中选择的特定项禁用按钮,只使用XAML 使用“可见性”属性,以下操作有效。如果我尝试使用IsEnabled,它怎么会不起作用?有什么我遗漏的吗?如果是这样,如果有人能解释原因,那就太好了。我应该一直使用转换器吗 <ComboBox Name="WidthTypeComboBox" ItemsSource="{Binding Source={StaticResource WidthType}}" SelectedItem="{B

我知道这可以在转换器中完成,但我想基于组合框中选择的特定项禁用按钮,只使用XAML

使用“可见性”属性,以下操作有效。如果我尝试使用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>

实际上,我不确定第一个是如何工作的。这取决于您为按钮上的属性设置了什么。通常,您需要样式中的默认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>


这取决于属性值设置位置的优先级。例如,本地设置的特性值将覆盖样式设置器/触发器。用一些例子解释依赖性属性的前后关系。

XAML中的可见性与布尔值不同。。这就是为什么我们有转换器bool->visibility and visibility->bool;)使用IValueConverter没有什么丢脸的。像“我只使用XAML”这样的人为约束并不总是最好的主意。@jan.h,我同意。如果XAML太复杂或可读性不强,我通常会尝试使用XAML,然后使用转换器。谢谢。使用默认的setter就可以了。谢谢你的解释。这篇文章也帮了大忙。