选择单选按钮时,组合框不会被禁用

时间:2013-03-27 13:17:04

标签: wpf binding combobox radio-button

我在一个示例中尝试this,它似乎工作正常。然后我将它应用到我们正在处理的主项目中,但它失败了。这是相关的代码片段:

<ComboBox Name="Combo" IsSynchronizedWithCurrentItem="True" 
ItemsSource="{Binding Tables}" SelectedItem="{Binding TableName, Mode=TwoWay}" 
Style="{StaticResource ComboBoxStyle}" Grid.Row="1" Height="30" Width="180" 
SelectionChanged="Combo_SelectionChanged" IsEnabled="{Binding IsChecked, ElementName=rdBtnList}" Margin="6,20,6,0" Grid.RowSpan="2" />

和控制它的单选按钮:

<RadioButton Content="By List" Height="16" IsChecked="{Binding Path=ListSelect, Mode=TwoWay}" 
HorizontalAlignment="Right" Margin="0,6,24,0"  Name="rdBtnList" VerticalAlignment="Top" 
Background="DodgerBlue" FontSize="13" FontWeight="Bold" Grid.RowSpan="2" />

有人看到任何看似不正确的东西(关于IsEnabled情况)吗?

1 个答案:

答案 0 :(得分:1)

现在,编写代码的方式,选择单选按钮时组合框已启用。如果你想要相反的情况发生,当选择单选按钮时,应该禁用组合框,你需要一个转换器来使布尔值相反。

public class OppositeBoolConverter : IValueConverter {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            return !System.Convert.ToBoolean(value);
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            return value;
        }
    }
}

现在,添加命名空间引用并将转换器添加到组合框的绑定中:

xmlns:local="clr-namespace:NAMESPACE"

<local:OppositeBoolConverter x:Key="cnt" />

IsEnabled="{Binding IsChecked, Converter={StaticResource cnt}, ElementName=rdBtnList}"