我有一个收藏包含收藏品本身。现在我想通过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,但这也没有解决我的问题。
答案 0 :(得分:1)
您可以使用RelativeSource
绑定来访问VisualTree上的项目
例如,
Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}},
Path=DataContext.SomeColorProperty}"
这应该查找你的VisualTree中最近的Canvas
对象,它将是Itemcntrl12
中使用的对象,它将绑定到它的DataContext
,它应该是一个数据项在您的第一个ItemsControl
。
如果你想上升到另一个级别并绑定到第一个ItemsControl
(Itemcntrl10
)的属性,你可以使用绑定的AncestorLevel
属性来指定第二个画布而不是第一个。