0

したがって、trueとfalseの2つの値を持つ単純なコンボボックスを作成したいと思います。キャッチは、バインドしたいアイテムで、trueの場合は「1」、falseの場合は「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;
    }

Trueを選択すると「1」が正しく設定され、その逆も同様であるという意味で機能しますが、コード内の別の場所でプロパティが1または0に変更された場合は、現在の項目をTrue/Falseに設定する必要もあります。変更されたInotifypropertyは、バインドされた文字列に正しく設定されています。呼び出されている秘密をブレークポイントできますが、アイテムは変更されません。純粋に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 に答える