Привязка к свойству IsSelected родительского ListViewItem - PullRequest
12 голосов
/ 24 октября 2011

Я пытаюсь связать свойство Visibility TextBlock, которое хранится в ItemTemplate для ListView, со свойством IsSelected родительского ListViewItem TextBlock.

С этой разметкой TextBlock всегда виден.

<ListView x:Name="ItemListView" ItemsSource="{Binding Path=Accounts}" Margin="60,0,0,10" Grid.Row="1" Grid.Column="0">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100">
                    </ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="200"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Image Width="100" Height="100" Grid.Column="0"></Image>
                <StackPanel Grid.Column="1">
                    <TextBlock Text="{Binding Path=Account.Name}"  
                                FontSize="24" Margin="5,0,0,0" TextWrapping="Wrap" />
                </StackPanel>
                <TextBlock Grid.Column="3" VerticalAlignment="Bottom"
                            Visibility="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=IsSelected, Converter={StaticResource boolConverter}, Mode=OneWay}">
                    Show More Details...
                </TextBlock>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

Примечания: 1. Если это что-то меняет, то это WinRT;приложение Metro, написанное на C #.2. boolConverter довольно стандартный конвертер, похоже, работает правильно.

Ответы [ 3 ]

2 голосов
/ 30 октября 2011

Я думаю, что в этом случае вам придется использовать ElementName = ItemListView

1 голос
/ 24 октября 2011

Использование Mode=FindAncestor:

<TextBlock Grid.Column="3" VerticalAlignment="Bottom"
          Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}, Path=IsSelected, Converter={StaticResource boolConverter}, Mode=OneWay}">
0 голосов
/ 04 апреля 2014

@ Мурвен ответил близко. Вот что у меня сработало:

<TextBlock Visibility="{Binding DataContext.IsSelected, ElementName=ItemListView Converter={StaticResource boolConverter}, Mode=OneWay}">

Мне пришлось использовать DataContext.IsSelected для доступа к контексту ItemListView. Не уверен, что есть лучший способ.

...