2011-10-24 5 views
12

ListViewのItemTemplate内に保持されているTextBlockのVisibilityプロパティを、TextBlockの親ListViewItemのIsSelectedプロパティにバインドしようとしています。親ListViewItemのIsSelectedプロパティへのバインド

このマークアップを使用すると、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のです。 C#で書かれたメトロアプリ。 2. boolConverterは、標準的なコンバータが正しく動作するようです。

+1

WinRTについてはわかりませんが、TemplatedParentはDataTemplatesではなくControlTemplates用です。代わりに、Mode = FindAncestor、AncestorType = ListViewItemを試してください。 –

+1

出力ビューにバインディングエラーが表示されますか?TemplatedParentはListViewではなくContentPresenterになります。 – whoisthis

+0

列挙型Windows.UI.Xaml.Data.RelativeSourceModeはFindAncestorの値を持たない(または表示されません) 、残念ながら – Rob

答えて

1

使用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はWinRTのオプションではないようです:| – Rob

+0

それを使用しないでください。 'AncestorType'の' RelativeSource'は正常に動作するはずです –

+1

@AngelWPF、AncestorTypeは利用できません、FindAncestor関連のものはWinRTには存在しません。 – Rob

-1

@Murvenの答えは近くにあった使用する必要がありますと思います。これは私のために働いていたものです:

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

私はItemListViewのコンテキストにアクセスするためにDataContext.IsSelectedを使用する必要がありました。 良い方法があるかどうかはわかりません。

+1

これは、OPモデルが望むような 'ListViewItem'の' IsSelected'プロパティではなく、ビューモデルの 'IsSelected'プロポーザルにバインドしているようです。 – Trisped