Silverlight Xaml中的ComboBox IsEnabled绑定问题

时间:2011-06-10 01:18:13

标签: c# xaml silverlight binding combobox

我有一个ComboBox,其xaml如下

<ComboBox Name="ComboBoxDiscussionType" IsEnabled="{Binding ElementName=ComboBoxDiscussionType, Path=Items.Count, Converter={StaticResource ComboBoxItemsCountToBoolConverter}}"/>

并且转换器获取Items.Count并检查它是否大于0如果大于0然后启用它,否则禁用它

目标是启用ComboBox,如果ComboBox只有在其中有项目,否则禁用它, (自绑定到其item.count)

以下是我的转换器,

public class ComboBoxItemsCountToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (int)value > 0;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

我如何实现它?现在上面的Binding给了我一个错误

1 个答案:

答案 0 :(得分:5)

由于我不理解的原因,在Silverlight上,转换器看到的value类型为double,但它应为int。事实上,它是WPF上的int

但是既然如此,只需处理 double就可以解决问题:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return (int)(double)value > 0;
}

奇怪的是,更传统的相对源绑定也不起作用:

<Binding RelativeSource="{RelativeSource Self}" .../>

但您的原始元素名称绑定确实:

<ComboBox Name="ComboBoxDiscussionType" IsEnabled="{Binding ElementName=ComboBoxDiscussionType, Path=Items.Count, Converter={StaticResource ComboBoxItemsCountToBoolConverter}}"/>

这对我来说似乎很麻烦,但Silverlight有时会是一个奇怪的野兽。