0

所以我只想制作一个简单的组合框,它有 2 个值,真和假。关键是我要绑定的项目应该收到一个“1”表示真,一个“0”表示假。如果可能的话,我正在尝试使用纯 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;
    }

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

4

1 回答 1

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 中验证了它的工作原理。

窥探

于 2012-04-22T03:17:49.430 回答