WPF中静态ComboBox的简单值/索引

时间:2012-04-05 21:45:52

标签: c# wpf

所以我只想制作一个简单的组合框,它有2个值,true和false。 catch是我要绑定的项应该接收“1”表示true,“0”表示false。如果可能的话,我试图用纯xaml完成(转换器是可以接受的,但我因此无法使它工作)。这是我的代码......

            <ComboBox SelectedItem="{Binding Criteria,Converter={StaticResource BoolToIntConverter}}">
                <ComboBox.Items>
                    <ComboBoxItem Name="True" Content="True" />
                    <ComboBoxItem Name="False" Content="False" />
                </ComboBox.Items>
            </ComboBox>

转换器看起来像这样......

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ComboBoxItem cbo = new ComboBoxItem();

        if (value.ToString() == "1")
            cbo.Name = "True";
        else
            cbo.Name = "False";
        return cbo;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value.ToString().Contains("True"))
            return 1;
        return 0;
    }

它的工作原理是,如果我选择True“1”设置正确,反之亦然,但是如果属性被另一个地方改为1或0,它还需要将当前项设置为True / False。码。 Inotifyproperty已更改在绑定字符串上正确设置,我可以断开被调用的隐蔽点,但该项目不会更改。有一种简单的方法可以在纯xaml中使用组合框建立值/索引关系(我不想使用支持对象来实现这一点)。如果没有,有没有办法纠正我的转换器,以获得我正在寻找的行为?

1 个答案:

答案 0 :(得分:1)

可以在复选框上应用控件模板,使其显示为组合框。如何在XAML中完成此操作的示例如下:

<CheckBox Content="Select" Width="100" Height="22">
        <CheckBox.Style>
            <Style TargetType="{x:Type CheckBox}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <ComboBox>
                                <ComboBoxItem x:Name="TrueComboBoxItem" Content="True" IsSelected="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=CheckBox}, UpdateSourceTrigger=PropertyChanged}" />
                                <ComboBoxItem x:Name="FalseComboBoxItem" Content="False" />

                            </ComboBox>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>                     
        </CheckBox.Style>
    </CheckBox>

我已经在Snoop中验证过这是有效的。

Snoop