wpf 绑定到父控件中的属性

aiqt4smr  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(301)

我有以下案例:

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

polhcujo1#

请尝试:

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

nnt7mjpx2#

你可以用

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

查找您上面的特定控件

smdncfj3

smdncfj33#

因为你在一个DataTemplate的上下文中,你不能通过TemplatedParent模式访问属性,至少在你的例子中是这样。[...]* Link我不确定,它可以在DataTemplate中使用,因为我只在ControlTemplates中见过它,但既然医生没说什么
你能做的就是试着找到Ancestor

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

我还没有在DataTemplates中使用,所以没有保修。

相关问题