2011-10-24 11 views
12

Próbuję powiązać właściwość Visibility obiektu TextBlock, która jest przechowywana w ItemTemplate dla ListView z właściwością IsSelected nadrzędnego obiektu ListViewItem obiektu TextBlock.Powiązanie z właściwością IsSelected obiektu nadrzędnego ListViewItem

Z tym znacznikiem, TextBlock jest zawsze widoczny.

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

Uwagi: 1. W przypadku to czyni wszelkie różnice, to WinRT; aplikacja Metro napisana w języku C#. 2. boolConverter to dość standardowy konwerter wydaje się działać poprawnie.

+1

Not sure about WinRT, ale TemplatedParent dotyczy ControlTemplates zamiast DataTemplates. Try Mode = FindAncestor, AncestorType = ListViewItem. –

+1

Czy wyświetla błędy wiązania w widoku wyjściowym, prawdopodobnie TemplatedParent tutaj byłoby ContentPresenter, a nie ListView – whoisthis

+0

Wyliczenie Windows.UI.Xaml.Data.RelativeSourceMode nie ma (lub nie wydaje się!) Mieć wartość dla FindAncestor , niestety – Rob

Odpowiedz

1

Zastosowanie 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 nie wydaje się być opcją w WinRT: | – Rob

+0

Nie używaj tego wtedy. 'FindAncestor 'nie musi być dostarczany.' RelativeSource' z 'AncestorType' powinno działać poprawnie. –

+1

@AngelWPF, AncestorType również nie jest dostępny, wygląda na to, że FindAncestor nie ma w WinRT żadnych informacji. – Rob

-1

odpowiedź @Murven „s było blisko. To jest to, co pracował dla mnie:

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

musiałem użyć DataContext.IsSelected dostęp do kontekstu ItemListView. Nie wiem, czy jest lepszy sposób.

+1

Wygląda na to, że wiąże się z prooptrią "IsSelected" modelu widoku, a nie z właściwością 'IsSelected' ListViewItem, tak jak chce tego OP. – Trisped

Powiązane problemy