4

ComboBox の選択をクリアするボタンを持つカスタム ComboBox コントロールを作成しました。

<Style TargetType="{x:Type local:ClearableComboBox}">
    <Setter Property="SelectedItem" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ClearableComboBox}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <DockPanel>
                        <Button Name="btnClear" DockPanel.Dock="Right" ToolTip="Clear" Width="20">
                            <Image Source="pack://application:,,,/img/icons/silk/cross.png" Stretch="None" />
                        </Button>
                        <ComboBox Name="comboBox"
                                  ItemsSource="{TemplateBinding ItemsSource}"
                                  SelectedItem="{TemplateBinding SelectedItem}"
                                  DisplayMemberPath="{TemplateBinding DisplayMemberPath}" />
                    </DockPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

ItemsSource のバインディングは正常に機能しますが、SelectedItem のバインディングは機能しません。Google で検索したところ、ここで問題の解決策が見つかりました。具体的には、SelectedItem バインディングを次のように変更します。

SelectedItem="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedItem}"

期待どおりに動作させます。

SelectedItem の元の TemplateBinding が機能しないのに、ItemsSource の TemplateBinding は正常に機能するのはなぜですか?

4

1 に答える 1

7

違いの1つ(私が思うに、あなたの場合の主な問題です)は、TemplateBinding常にOneWayであるのに対し、プロパティに応じてBinding選択することOneWayです。(詳細はこちら。)TwoWay

このディスカッションで他の違いを見つけることができます。

于 2011-11-11T18:06:03.987 に答える