我有一个带有项目模板的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访问父级的“当前”项。
答案 0 :(得分:1)
您似乎想要从内部DataTemplate访问具有MySecondCollection
属性的对象。
这应该有效:
CommandParameter="{Binding DataContext,
RelativeSource={RelativeSource AncestorType=ContentPresenter, AncestorLevel=2}}"