TemplateBinding не работает для SelectedItem в пользовательском элементе управления, расширяющем ComboBox - PullRequest
2 голосов
/ 11 ноября 2011

Мы создали собственный элемент управления 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}"

делает ее работу ожидаемой.

Почему оригинальная TemplateBinding для SelectedItem не работает, в то время как TemplateBinding для ItemsSourceработал нормально?

1 Ответ

4 голосов
/ 11 ноября 2011

Одно из отличий (которое, как мне кажется, является основной проблемой в вашем случае) заключается в том, что TemplateBinding всегда OneWay, тогда как Binding выбирается равным OneWay или TwoWay в зависимости от имущества . (Подробнее здесь .)

Вы можете найти другие отличия в в этой дискуссии .

...