我有一个包含许多项目的容器类型控件。容器控件定义了DataTemplate
,其中还包含ItemsControl
,其中包含DataTemplate
项。但是这些项需要绑定到容器控件中的某些内容。下面给出了一个简化的例子:
<DataTemplate DataType="{x:Type ContainerType}">
<!-- Display of the container stuff-->
<ItemsControl ItemsSource="{Binding Items, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type Item}">
<!-- Display of the item stuff -->
<ComboBox Text="Choose a container-level option..."
ItemsSource="{WHAT GOES HERE?}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
如何将项目级别的内容绑定回容器级别?
答案 0 :(得分:6)
您可以使用RelativeSource
绑定
<ComboBox ItemsSource="{Binding SomeCollection,
RelativeSource={RelativeSource
AncestorType={x:Type local:MyContainerControl}}}"/>
您用于绑定路径的内容取决于集合的位置。如果它位于DependencyProperty
上的MyContainerControl
,则上述绑定工作正常。如果它位于DataContext
的{{1}},那么您需要将绑定路径设置为MyContainerControl
答案 1 :(得分:1)
也许使用TemplateBinding?
类似的东西:
{TemplateBinding YourPropertyInTheDataTemplateContext}
答案 2 :(得分:1)
我一直是ElementName
的粉丝。基本上你确定你将外层控件命名为:x:Name="MainWin"
然后你可以这样做:
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ComboBox ItemsSource="{Binding ElementName=MainWin, Path=DataContext.SomeCollection}"/>