如何从ItemsControl.ItemTemplate中绑定到父DataTemplate

时间:2011-11-18 15:44:07

标签: wpf data-binding datatemplate

我有一个包含许多项目的容器类型控件。容器控件定义了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>

如何将项目级别的内容绑定回容器级别?

3 个答案:

答案 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}"/>