2011-10-24 40 views
12

Tôi đang cố gắng ràng buộc thuộc tính Hiển thị của một TextBlock được giữ trong ItemTemplate cho một ListView với thuộc tính IsSelected của ListViewItem cha của TextBlock.Ràng buộc với thuộc tính IsSelected của phụ huynh ListViewItem

Với đánh dấu này, TextBlock luôn hiển thị.

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

Ghi chú: 1. Trong trường hợp có sự khác biệt, đây là WinRT; một ứng dụng Metro được viết bằng C#. 2. boolConverter là một trình chuyển đổi khá chuẩn xuất hiện hoạt động chính xác.

+1

Không chắc chắn về WinRT, nhưng TemplatedParent là cho ControlTemplates chứ không phải là DataTemplates. Hãy thử chế độ = FindAncestor, AncestorType = ListViewItem thay thế. –

+1

Hiện nó hiển thị lỗi ràng buộc trong xem đầu ra, tôi đoán TemplatedParent ở đây sẽ là ContentPresenter và không ListView – whoisthis

+0

Việc liệt kê Windows.UI.Xaml.Data.RelativeSourceMode không (hoặc không xuất hiện!) Có một giá trị cho FindAncestor , không may là – Rob

Trả lời

1

Sử dụng 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 dường như không phải là một tùy chọn trong WinRT: | – Rob

+0

Không sử dụng nó sau đó. 'FindAncestor 'doesnt phải được cung cấp.' RelativeSource' với 'AncestorType' sẽ hoạt động ok. –

+1

@AngelWPF, AncestorType không có sẵn, hoặc có vẻ như bất cứ điều gì FindAncestor liên quan không có trong WinRT. – Rob

2

Tôi nghĩ rằng trong trường hợp này, bạn sẽ phải sử dụng ElementName = ItemListView

-1

@Murven 's câu trả lời là gần. Đây là những gì làm việc cho tôi:

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

tôi đã phải sử dụng DataContext.IsSelected để truy cập bối cảnh của ItemListView. Không chắc chắn nếu có cách nào tốt hơn.

+1

Điều này xuất hiện để liên kết với một toán tử 'IsSelected' của mô hình khung nhìn, chứ không phải thuộc tính' IsSelected' của 'ListViewItem' như OP muốn. – Trisped

Các vấn đề liên quan