Question

I have a ListBox that use my custom ItemTemplate. I want to set Visibility property in my TextBlock (inside my template) depending on selected item. I think of doing it using triggers. But how can I know inside my template if current item is selected or not?

<DataTemplate x:Key="myTemplate">
    <StackPanel Orientation="Horizontal">
        <Image Tag="{Binding priority}" Loaded="SetIconPriority"/>
        <Image Tag="{Binding alarm}" Loaded="SetIconAlarm"/>
        <!-- I want this TextBlock to be visible only when item is selected -->
        <TextBlock Text="{Binding description}"/>
    </StackPanel>
</DataTemplate>

edit: It works, thanks! Code:

            <TextBlock Grid.Column="2" Grid.Row="1" Text="{Binding opis}">
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="False">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
Was it helpful?

Solution

Using a RelativeSource binding with AncestorType being ListBoxItem.

<DataTrigger Binding="{Binding IsSelected,
                               RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
             Value="True">

(May want to reverse the logic and Collapse on False instead, avoids the default value Setter)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top