16

我有以下情况:

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

3 回答 3

30

请试试这个:

 <Label Content="{Binding (ListView.AlternationIndex),
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"  />

更新:这是正确的 xaml,绑定应该是相对源 = 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>
于 2013-04-03T14:12:49.297 回答
5

您可以使用

RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}} 

找到您上方的特定控件

于 2013-04-03T13:56:11.177 回答
2

好吧,因为您处于 a 的上下文中,所以DataTemplate您无法通过TemplatedParent模式访问该属性,至少在您的情况下是这样。它指的是应用模板(数据绑定元素所在的元素)的元素。[...] 链接我不确定,它可以在 a 中使用,DataTemplate因为我只在 中看到过它ControlTemplates,但是由于文档没有说明其他...

您可以做的是尝试找到Ancestor. 例如

<Label Content="{Binding AlternationIndex, 
       RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}" ... />

我还没用过DataTemplates,所以不保修。

于 2013-04-03T14:00:26.977 回答