0

我有一个 Collection 包含一个 Collection 本身。现在我想通过 wpf 中的两个集合。我正在尝试将第二个集合的颜色属性绑定到第一个集合的依赖属性。但是直到现在,我还没有找到正确绑定它的方法。在 Visibility-Binding 的情况下,我通过将第二个 ItemsPanelTemplate 中画布布局的 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 但这也没有解决我的问题。

4

1 回答 1

1

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

例如,

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

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

如果您想上一层并绑定到第一个ItemsControl( Itemcntrl10) 的属性,您可以使用AncestorLevel绑定的属性来指定第二个 Canvas 而不是第一个。

于 2013-04-18T12:18:32.003 回答