我有一个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给了我一个错误
答案 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有时会是一个奇怪的野兽。