我有以下情况:
Window
|_Grid
|_ListView (MainProductGrid)
|_View
|_GridView
|_GridViewColumn
|_CellTemplate
|_DataTemplate
|_Label (LabelID)
现在,我想在LabelID中显示ListView中行的索引。 所以我做了以下几点:
<ListView ItemsSource="{Binding Path=ProductItems}" AlternationCount="{Binding Path=ProductItems.Count}">
...
对于标签,我有以下内容:
<Label x:Name="LabelID"
Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},
Path=(ListView.AlternationIndex)}"/>
但它的LabelID只显示0 .. 所以我认为TemplatedParent没有指向ListView控件.. 那么我如何纠正绑定指向“上层父”,在我的情况下是ListView?
提前致谢
################更新: 这是完整的xaml ......
<Grid x:Name="mainGrid">
<ListView ItemsSource="{Binding Path=ProductItems}" AlternationCount="{Binding Path=ProductItems.Count}" x:Name="MainProductGrid">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn x:Name="gvc" Header="id" Width="auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding (ListView.AlternationIndex),RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Product name" DisplayMemberBinding="{Binding Path=ProductName}" Width="auto" />
</GridView>
</ListView.View>
</ListView>
</Grid>
答案 0 :(得分:20)
请试试这个:
<Label Content="{Binding (ListView.AlternationIndex),
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}" />
更新: 这里是正确的xaml,绑定应该是relativesource = ListViewItem,但是网格列宽度有问题:
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn x:Name="gvc" Header="id" Width="30">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding (ListView.AlternationIndex),
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListViewItem}}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Product name"
DisplayMemberBinding="{Binding Path=ProductName}"
Width="auto" />
</GridView>
</ListView.View>
答案 1 :(得分:3)
您可以使用
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}
找到你上面的特定控件
答案 2 :(得分:2)
好吧,因为您处于DataTemplate
的上下文中,您无法通过TemplatedParent
模式访问该媒体资源,至少在您的情况下如此。它指的是应用模板(其中存在数据绑定元素)的元素。 [...] Link我不确定,它可以在DataTemplate
中使用,因为我只在ControlTemplates
中看过它,但是因为文档没有说出来......
您可以尝试找到Ancestor
。 E.g。
<Label Content="{Binding AlternationIndex,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}" ... />
我还没有在DataTemplates
中使用,所以没有保修。