如何从NESTED ItemsControl绑定到活动的ItemsControl项

时间:2013-07-29 21:17:43

标签: c# wpf xaml data-binding

这让我疯了。 也许我设计了错误的数据,但我试图从父ItemsControl绑定到活动项。

每个区域都会获得一种颜色,以便在屏幕上轻松识别。我没有给每个座位赋予颜色属性,而是在Area模型中种植了颜色。所有儿童座椅都需要使用这种颜色来自己画画。

无论我尝试什么,我都无法访问父ItemsControl,因此我可以获取该特定区域的活动颜色属性。

模型(简体)

public class BuildingLayout
{
    public ObservableCollection<Area> Areas { get; set; }
}

public class Area
{
    public Color Color { get; set; } // The color I want to bind to
    ...
    public ObservableCollection<Table> Tables { get; set; }
}

public class Table
{
    public int Seat { get; set; } // The seat needs to get the area color
}

XAML

<ItemsControl ItemsSource="{Binding Path=Areas}">
    ...
    <ItemsControl.ItemTemplate>
        <!-- Nested Listbox -->
        <ItemsControl ItemsSource="{Binding Path=Tables}">
              ...
              <ItemsControl.ItemTemplate>
                  <DataTemplate>
                      <!-- Now I want to get to the color property of
                           the parent (Area) -->
                      <Rectangle Fill="{Binding ..., Path=Color}" />
                  </DataTemplate>
              </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ItemsControl.ItemTemplate>
</ItemsControl>

1 个答案:

答案 0 :(得分:6)

<Rectangle Fill="{Binding DataContext.Color, RelativeSource={RelativeSource AncestorType=ItemsControl}"/>

因为嵌套的ItemsControl位于Parent ItemTemplate的内部,因此它将具有Area实例,因为它是DataContext。