2011-10-24 18 views
12

Sto tentando di associare la proprietà Visibility di un TextBlock contenuto in ItemTemplate per un controllo ListView alla proprietà IsSelected del ListViewItem padre di TextBlock.Collegamento alla proprietà IsSelected del genitore ListViewItem

Con questo markup, il TextBlock è sempre visibile.

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

Note: 1. Nel caso in cui fa alcuna differenza, questo è WinRT; un'app Metro scritta in C#. 2. boolConverter è un convertitore abbastanza standard che sembra funzionare correttamente.

+1

Non sono sicuro di WinRT, ma TemplatedParent è per ControlTemplates anziché DataTemplates. Prova Mode = FindAncestor, AncestorType = ListViewItem invece. –

+1

Mostra errori di associazione nella vista di output, suppongo che TemplatedParent qui sia ContentPresenter e non ListView – whoisthis

+0

L'enumerazione Windows.UI.Xaml.Data.RelativeSourceMode non ha (o non sembra!) Un valore per FindAncestor , sfortunatamente – Rob

risposta

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 non sembra essere un'opzione in WinRT: | – Rob

+0

Non usarlo allora. 'FindAncestor 'Non deve essere fornito.' RelativeSource' con 'AncestorType' dovrebbe funzionare ok –

+1

@AngelWPF, AncestorType non è disponibile, sembra che FindAncestor non sia presente in WinRT – Rob

-1

risposta @Murven s' era vicino. Questo è ciò che ha funzionato per me:

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

ho dovuto usare DataContext.IsSelected per accedere al contesto della ItemListView. Non sono sicuro se c'è un modo migliore.

+1

Questo sembra collegarsi a una proprietà 'IsSelected' del modello di vista, non alla proprietà' IsSelected' di 'ListViewItem' come vuole l'OP. – Trisped

Problemi correlati