2013-04-18 74 views
0

我有一個包含集合本身的集合。現在我想通過wpf中的兩個集合。 我正在嘗試將第二個Collection的Color屬性綁定到第一個Collection的Dependency Property。但直到現在,我還沒有找到一種方法來正確綁定它。 在Visibility-Binding的情況下,我通過將第二個ItemsPanelTemplate中的canvas佈局的Visibility-Property綁定到所需屬性來找到解決方法。嵌套的ItemControls - 綁定到上層控件

這裏的一些代碼片段代表了我的情況:

<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

可以使用RelativeSource結合,以進一步訪問某個項目了的VisualTree

例如,

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

這應該查查你的VisualTree最接近的Canvas對象,將被使用的一個在Itemcntrl12中,它將綁定到它的DataContext,這應該是第一個ItemsControl中的數據項。

如果你想上去另一個層次,並結合第一ItemsControlItemcntrl10)的屬性,你可以使用綁定的AncestorLevel屬性來指定第二畫布,而不是第一個。

+0

非常感謝您的快速響應! :) – dabuntu