Доступ к значению данных ListBox DisplayMemberPath в шаблоне SelectedItem - PullRequest
0 голосов
/ 09 февраля 2011

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

В приведенном ниже примере я хочу связать свойство «Text» выбранного элемента ListBox «выбранный элемент»к значению данных DisplayMemberPath в просматриваемой структуре.Такое выражение привязки XAML заменяет знаки вопроса в коде (Text = "{Binding ????????????????").

Использование ContentPresenter вместо привязкитекст работает в целях отображения, но я не смог привязать его к компоненту «Текст», используемому на докладчике.Альтернативой нахождению выражения привязки является возможность получать текстовое содержимое из ContentPresenter.

Я могу придумать несколько способов сделать это с помощью кода, но я ищу решение XAML, еслитакая вещь существует.

Я ценю любые идеи.Я почти уверен, что на этот вопрос есть тривиальный ответ, но, потратив на это пару дней, я признаю, что толчок в правильном направлении очень помог бы мне.

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <XmlDataProvider x:Key="NobelLaureatesInPhysics"
                     XPath="/NobelLaureatesInPhysics">
        <x:XData>
            <NobelLaureatesInPhysics xmlns="">
                <NobelLaureate>
                    <ID>1</ID>
                    <Name>Wilhelm Röntgen</Name>
                    <AwardDate>12/10/1901</AwardDate>
                </NobelLaureate>
                <NobelLaureate>
                    <ID>2</ID>
                    <Name>Hendrik Lorentz</Name>
                    <AwardDate>12/10/1902</AwardDate>
                </NobelLaureate>
                <NobelLaureate>
                    <ID>3</ID>
                    <Name>Pieter Zeeman</Name>
                    <AwardDate>12/10/1902</AwardDate>
                </NobelLaureate>
            </NobelLaureatesInPhysics>
        </x:XData>
    </XmlDataProvider>

    <ControlTemplate x:Key="ItemTemplate"
                     TargetType="ListBoxItem">
        <TextBlock Foreground="Black">
             <ContentPresenter />
        </TextBlock>
    </ControlTemplate>

    <ControlTemplate x:Key="SelectedItemTemplate"
                     TargetType="ListBoxItem">
        <TextBox Background="Black"
                 Foreground="White"
                 Text="{Binding ????????????????"/>
    </ControlTemplate>

    <Style TargetType="{x:Type ListBoxItem}"
           x:Key="ContainerStyle">
        <Setter Property="Template"
                Value="{StaticResource ItemTemplate}" />
        <Style.Triggers>
            <Trigger Property="IsSelected"
                     Value="True">
                <Setter Property="Template"
                        Value="{StaticResource SelectedItemTemplate}" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="TestListBoxStyle"
           TargetType="{x:Type ListBox}">
        <Setter Property="ItemContainerStyle"
                Value="{DynamicResource ContainerStyle}" />
    </Style>
</Window.Resources>

<Grid>
    <ListBox Style="{DynamicResource TestListBoxStyle}"
             ItemsSource="{Binding Source={StaticResource NobelLaureatesInPhysics}, XPath=NobelLaureate}"
             DisplayMemberPath="Name"/>
</Grid>

1 Ответ

0 голосов
/ 10 февраля 2011
{Binding Path=DisplayMemberPath, RelativeSource={RelativeSource Mode=FindAncestor, Type={x:Type ListBox}}

Это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...