在嵌套的ItemsControl中获取CurrentItem

时间:2017-12-14 07:56:51

标签: wpf xaml

我有一个带有项目模板的itemscontrol。在此项目模板中,存在另一个itemscontrol。后面的ItemsControl在其模板中有一个按钮,绑定到该模板的命令需要获取“父”itemscontrol当前项。

结构看起来像这样:

<ItemsControl x:Name="outerItemsControl" ItemsSource={Binding MyCollection}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource={Binding MySecondCollection}>
                <ItemTemplate>
                    <DataTemplate>
                        <Button Command="{Binding MyFantasticCommand}"
                                CommandParameter="{Binding ????}"/>
                    </DataTemplate>
                </ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    <ItemControl.ItemTemplate>
</ItemsControl> 

我应该更换{Binding ????}以获取MyCollection中的当前项目?

我试过两个:

Binding ., ElementName=outerItemsControl

Binding Path="." RelativeSource="{RelativeSource AncestorType={x:Type ItemsControl}, AncestorLevel=2}

修改

通常当我们需要访问项目控件中的“当前项目”时,我们会执行以下操作:

<ItemsControl x:Name="outerItemsControl" ItemsSource={Binding MyCollection}>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
               <Button Command="{Binding MyCommand}" CommandParameter="{Binding .}"/>
            </DataTemplate>
        <ItemControl.ItemTemplate>
    </ItemsControl> 

我想做与此示例相同的操作,但是从子itemscontrol访问父级的“当前”项。

1 个答案:

答案 0 :(得分:1)

您似乎想要从内部DataTemplate访问具有MySecondCollection属性的对象。

这应该有效:

CommandParameter="{Binding DataContext,
    RelativeSource={RelativeSource AncestorType=ContentPresenter, AncestorLevel=2}}"