c# – 基于SelectedItem设置ComboBox的IsEnabled属性

前端之家收集整理的这篇文章主要介绍了c# – 基于SelectedItem设置ComboBox的IsEnabled属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想根据另一个ComboBox中是否选择了一个项来启用/禁用ComboBox.我能够通过在Style上设置触发器来使其工作,但这会覆盖我对组合框的自定义全局样式.有没有另一种方法来获得相同的功能而不会失去我的风格?
<ComboBox Grid.Column="1" Grid.Row="1"
              Name="AnalysisComboBox" 
              MinWidth="200"
              VerticalAlignment="Center" HorizontalAlignment="Left"
              ItemsSource="{Binding Path=AvailableAnalysis}">

        <ComboBox.Style>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="IsEnabled" Value="True" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedItem,ElementName=ApplicationComboBox}" Value="{x:Null}">
                        <Setter Property="IsEnabled" Value="False" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ComboBox.Style>
    </ComboBox>

解决方法

您不需要通过Style执行此操作,您可以使用值转换器直接绑定IsEnabled属性,如下所示:
<ComboBox Grid.Column="1" Grid.Row="1"
              Name="AnalysisComboBox" 
              MinWidth="200"
              VerticalAlignment="Center" HorizontalAlignment="Left"
              IsEnabled={Binding SelectedItem,ElementName=ApplicationComboBox,Converter={StaticResource NullToFalseConverter}}"
              ItemsSource="{Binding Path=AvailableAnalysis}"/>

其中NullToFalseConverter是以下转换器实例的键:

public class NullToFalseConverter: IValueConverter
{
    public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
        return value == null;
    }

    public object ConvertBack(object value,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

猜你在找的C#相关文章