绑定到父ListViewItem的IsSelected属性

12
我试图将ListView的ItemTemplate中TextBlock的Visibility属性绑定到TextBlock父级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#编写的Metro应用程序。 2. boolConverter 是一个相当标准的转换器,似乎工作正常。


1
不确定WinRT,但TemplatedParent是用于ControlTemplates而不是DataTemplates的。尝试使用Mode=FindAncestor,AncestorType=ListViewItem。 - Matt Hamilton
1
它是否在输出视图中显示绑定错误,我猜这里的 TemplatedParent 应该是 ContentPresenter 而不是 ListView。 - Bhupendra
枚举Windows.UI.Xaml.Data.RelativeSourceMode似乎没有FindAncestor的值,不幸的是。 - Rob
我也遇到了同样的问题。你找到解决方法了吗?我有一个临时的代码后端解决方案,但我并不完全满意。 - wpfwannabe
有人解决了这个问题吗?我也遇到了同样的问题 :( - eitan barazani
我在这里放了一个类似问题的答案链接 - Maxim Balaganskiy
3个回答

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

2
在WinRT中似乎找不到FindAncestor选项 :| - Rob
1
@AngelWPF,AncestorType也不可用,看起来与FindAncestor相关的任何内容都不存在于WinRT中。 - Rob
2
嗯...我不知道那个。他们把它删除了似乎很疯狂,我也不确定要用什么替代它... - Thomas Levesque
1
Silverlight 5支持FindAncestor,希望WinRT也能支持。 - Denis
我从谷歌来到这里,寻找解决非WinRT问题的方法,并找到了。谢谢。 - Peter W.
显示剩余3条评论

2
我认为在这种情况下,您需要使用 ElementName=ItemListView。

-1

@Murven的答案接近了。这是对我有用的:

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

我不得不使用DataContext.IsSelected来访问ItemListView的上下文。 不确定是否有更好的方法。


1
这似乎绑定到视图模型的IsSelected属性,而不是像OP想要的那样绑定到ListViewItemIsSelected属性。 - Trisped

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接