2013-04-18 1 views
0

У меня есть одна коллекция, в которой содержится сама коллекция. Теперь я хочу пройти через коллекцию в wpf. Я пытаюсь привязать свойство цвета второй коллекции к свойству зависимости первой коллекции. Но до сих пор я не нашел способ привязать его должным образом. В случае привязки к видимости Я нашел обход, связав свойство видимости макета холста во втором элементе ItemsPanelTemplate с желаемым свойством.Вложенные 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.

Если вы хотите, чтобы подняться еще один уровень и привязать к свойству первого ItemsControl (Itemcntrl10), вы можете использовать AncestorLevel свойство связывания указать 2-й Canvas вместо первого.

+0

Большое спасибо за этот быстрый ответ! :) – dabuntu

 Смежные вопросы

  • Нет связанных вопросов^_^