我确信这很容易,但我不知道怎么做。 我有一个ComboBox和一个Button,只有当ComboBox选择了一个项目时才需要启用Button,即如果在ComboBox中没有显示任何元素,则必须禁用Button。我怎么能这样做?
我尝试过以下操作:
IsEnabled="{Binding ElementName=mycombobox, Path=SelectedIndex}"/>
但它不起作用。我正在使用Silverlight 5。
提前致谢
答案 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();
}
}