Подтвердить что ты не робот

Binding ElementName внутри DataTemplate

Я пытаюсь связать свойство, зависящее от элемента управления в пределах того же DataTemplate.

Чтобы проиллюстрировать:

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <ComboBox x:Name="ComboList"
                  ItemsSource="{Binding StatTypes}"
                  SelectedItem="{Binding SelectedStatType, Mode=TwoWay, FallbackValue='Select a type'}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Text}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

        <TextBox Grid.Column="1" MinWidth="40" Margin="5">
            <TextBox.Text>
                <Binding Path="StatValue">
                    <Binding.Converter>
                        <converter:PercentageConverter SelectedStatType="{Binding ElementName=ComboList, Path=SelectedItem}" />
                    </Binding.Converter>
                </Binding>
            </TextBox.Text>
        </TextBox>
    </StackPanel>
</DataTemplate>

Но свойство в PercentageConverter никогда не устанавливается через это, и я не понимаю, почему. Это проблема с именованием? Если это так, я думал, что это не имеет значения, поскольку оно находится в одном и том же DataTemplate Если нет, что я делаю неправильно?

4b9b3361

Ответ 1

Это, вероятно, проблема с именами, привязка не является элементом фреймворка, любые объекты внутри него не будут обмениваться внешним указателем имен, а также не связывать ни с каким деревом, поэтому относительные привязки источника также должны потерпеть неудачу.

Вместо этого вы можете использовать x:Reference, он использует другой механизм:

{Binding SelectedItem, Source={x:Reference ComboList}}