如何在wpf中将boolean绑定到combobox

ovfsdjhp  于 2023-03-24  发布在  其他
关注(0)|答案(5)|浏览(200)

我想知道如何将一个布尔属性绑定到一个组合框上。组合框将是一个是/否组合框。

yduiuuwa

yduiuuwa1#

你可以使用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上的是Yes,索引1上的是No。那么你必须在绑定到SelectedIndex属性时使用该转换器。为此,你可以在参考资料部分声明你的转换器:

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

然后在绑定中使用它:

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

cmssoen22#

我发现自己在过去使用ComboBox项目的IsSelected属性来实现这一点。这个方法完全在xaml中。

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

fd3cxomn3#

第一个解决方案是用复选框替换你的“是/否”组合框,因为,好吧,复选框的存在是有原因的。
第二种解决方案是用true和false对象填充组合框,然后将组合框的'SelectedItem'绑定到布尔属性。

a5g8bdjr

a5g8bdjr4#

下面是一个示例(将启用/禁用替换为是/否):

<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);
    }
}

而且不需要玩指数。

isr3a4wc

isr3a4wc5#

您可以使用ComboBoxItem.Tag属性来实现以下操作:

<ComboBox SelectedValue="{Binding BooleanProperty}" SelectedValuePath="Tag">
   <ComboBoxItem Tag="False">No</ComboBoxItem>
   <ComboBoxItem Tag="True">Yes</ComboBoxItem>
</ComboBox>

与.NET 6配合良好(可能也适用于旧版本)。

相关问题