如何将布尔值绑定到wpf中的组合框

时间:2010-12-02 13:09:57

标签: wpf binding

好吧,我想知道如何将一个布尔属性绑定到一个组合框.Combobox将是一个是/否组合框。

4 个答案:

答案 0 :(得分:20)

您可以使用ValueConverter将布尔值转换为ComboBox索引并返回。像这样:

public class BoolToIndexConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((bool)value == true) ? 0 : 1;   
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((int)value == 0) ? true : false;
        }
    }
}

假设在索引0上为“是”,在索引1上为“否”。那么您必须使用该转换器绑定到SelectedIndex属性。为此,您在资源部分声明转换器:

  <Window.Resources>
    <local:BoolToIndexConverter x:Key="boolToIndexConverter" />
  </Window.Resources>

然后在绑定中使用它:

<ComboBox SelectedIndex="{Binding YourBooleanProperty, Converter={StaticResource boolToIndexConverter}}"/>

答案 1 :(得分:11)

第一个解决方案是用复选框替换你的'是/否'组合框,因为复选框存在是有原因的。

第二个解决方案是用真假对象填充你的组合框,然后将你的组合框的'SelectedItem'绑定到你的布尔属性。

答案 2 :(得分:9)

我发现自己过去曾使用ComboBox项目的IsSelected属性。这种方法完全是在xaml。

<ComboBox>
    <ComboBoxItem Content="No" />
    <ComboBoxItem Content="Yes" IsSelected="{Binding YourBooleanProperty, Mode=OneWayToSource}" />
</ComboBox>

答案 3 :(得分:1)

这是一个例子(用yes / no替换启用/禁用):

<ComboBox SelectedValue="{Binding IsEnabled}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={x:Static converters:EnabledDisabledToBooleanConverter.Instance}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
    <ComboBox.Items>
        <system:Boolean>True</system:Boolean>
        <system:Boolean>False</system:Boolean>
    </ComboBox.Items>
</ComboBox>

这是转换器:

public class EnabledDisabledToBooleanConverter : IValueConverter
{
    private const string EnabledText = "Enabled";
    private const string DisabledText = "Disabled";
    public static readonly EnabledDisabledToBooleanConverter Instance = new EnabledDisabledToBooleanConverter();

    private EnabledDisabledToBooleanConverter()
    {
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Equals(true, value)
            ? EnabledText
            : DisabledText;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //Actually won't be used, but in case you need that
        return Equals(value, EnabledText);
    }
}

无需使用指数。