嵌套ItemControls - 绑定到上层控件

时间:2013-04-18 12:09:43

标签: c# wpf data-binding itemscontrol

我有一个收藏包含收藏品本身。现在我想通过wpf中的两个集合。 我正在尝试将第二个Collection的Color属性绑定到第一个Collection的Dependency属性。但直到现在,我还没有找到一种方法来正确地绑定它。 在Visibility-Binding的情况下,我通过将第二个ItemsPanelTemplate中的canvas布局的Visibility-Property绑定到想要的属性来找到解决方法。

以下是代表我情况的一些代码:

<ItemsControl x:Name="Itemcntrl10" ItemsSource="{Binding Collection1}" >
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Canvas />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <ItemsControl x:Name="Itemcntrl12" ItemsSource="{Binding Collection2}"  > 
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <Canvas Visibility="{Binding Visibility, Converter={StaticResource BooleanToVisibilityConverter}}" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                            <Line X1="{Binding X}" Y1="{Binding Y}" 
                                                  X2="{Binding old.X}" Y2="{Binding old.Y}" 
                                                  StrokeThickness="{Binding Path=DataContext.StrokeThickness, ElementName=ThisMainWindow}" 
                                                   >
                                            <Line.Stroke>
                                                <SolidColorBrush  Color="Black" />
                                            </Line.Stroke>
                                        </Line>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

任何想法如何处理? 我想到ElementBinding到上面的ItemsControl,但这也没有解决我的问题。

1 个答案:

答案 0 :(得分:1)

您可以使用RelativeSource绑定来访问VisualTree上的项目

例如,

Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, 
                Path=DataContext.SomeColorProperty}"

这应该查找你的VisualTree中最近的Canvas对象,它将是Itemcntrl12中使用的对象,它将绑定到它的DataContext,它应该是一个数据项在您的第一个ItemsControl

如果你想上升到另一个级别并绑定到第一个ItemsControlItemcntrl10)的属性,你可以使用绑定的AncestorLevel属性来指定第二个画布而不是第一个。