绑定按钮IsEnabled取决于ComboBox选择

时间:2014-04-21 16:58:45

标签: c# silverlight combobox

我确信这很容易,但我不知道怎么做。 我有一个ComboBox和一个Button,只有当ComboBox选择了一个项目时才需要启用Button,即如果在ComboBox中没有显示任何元素,则必须禁用Button。我怎么能这样做?

我尝试过以下操作:

IsEnabled="{Binding ElementName=mycombobox, Path=SelectedIndex}"/>

但它不起作用。我正在使用Silverlight 5。

提前致谢

2 个答案:

答案 0 :(得分:0)

可能有一种更有效的方法,但我只是确定在SelectedIndexChanged事件中ComboBox.SelectedItem是否为空。

答案 1 :(得分:0)

MSDN可能会对您有所帮助here。它建议您使用转换器或数据触发器。我还没有测试过这个,但也许这会有用吗?

<Window.Resources>
    <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="IsEnabled" Value="True"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=SelectedItem, ElementName=comboBox1}" Value="{x:Null}">
                <Setter Property="UIElement.IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <ComboBox Name="comboBox1">
        <ComboBoxItem>One</ComboBoxItem>
        <ComboBoxItem>Two</ComboBoxItem>
        <ComboBoxItem>Three</ComboBoxItem>
    </ComboBox>

    <Button Style="{StaticResource MyButtonStyle}" Name="myButton" Content="Push me"/>
</Grid>

修改

我的印象是Cyndy已经把这一切都弄明白了,但对于未来的读者来说......

如评论中所述,您无法在Silverlight中执行DataTriggers。你需要做一个转换器。 Here是另一个可能有用的帖子。从本质上讲,您需要将XAML设置为:

<Button Content="MyButton" IsEnabled="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource myConverter}}"/>

然后在你的代码隐藏中,你需要类似的东西:

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !(value == null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}