2011-10-24 9 views
12

Estoy intentando vincular la propiedad Visibility de TextBlock que está contenida dentro de ItemTemplate para un ListView a la propiedad IsSelected de ListViewItem principal de TextBlock.Enlazando con la propiedad IsSelected del elemento ListViewItem principal

Con este marcado, el TextBlock siempre está visible.

<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> 

Notas: 1. En caso de que alguna diferencia, esto es WinRT; una aplicación de Metro escrita en C#. 2. boolConverter es un convertidor bastante estándar que parece funcionar correctamente.

+1

No estoy seguro acerca de WinRT, pero TemplatedParent es para ControlTemplates en lugar de DataTemplates. Pruebe Mode = FindAncestor, AncestorType = ListViewItem en su lugar. –

+1

¿Muestra errores de enlace en la vista de salida, supongo que el TemplatedParent aquí sería ContentPresenter y no ListView – whoisthis

+0

La enumeración Windows.UI.Xaml.Data.RelativeSourceMode no tiene (o no parece tener) valor para FindAncestor Desafortunadamente, – Rob

Respuesta

1

Uso Mode=FindAncestor:

<TextBlock Grid.Column="3" VerticalAlignment="Bottom" 
      Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}, Path=IsSelected, Converter={StaticResource boolConverter}, Mode=OneWay}"> 
+2

FindAncestor no parece ser una opción en WinRT: | – Rob

+0

No lo use entonces. 'FindAncestor 'no tiene que ser suministrado.' RelativeSource' con 'AncestorType' debería funcionar bien –

+1

@AngelWPF, AncestorType tampoco está disponible, parece que todo lo relacionado con FindAncestor no está presente en WinRT. – Rob

-1

respuesta @Murven 's estaba cerca. Esto es lo que funcionó para mí:

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

tuve que usar DataContext.IsSelected para acceder al contexto de la ItemListView. No estoy seguro si hay una manera mejor.

+1

Esto parece enlazar a una propiedad 'IsSelected' del modelo de vista, no a la propiedad' IsSelected' de 'ListViewItem' como desea OP. – Trisped

Cuestiones relacionadas