2

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

每个区域都有一种颜色,以便在屏幕上轻松识别。我没有将颜色属性赋予每个座位,而是在区域模型中植入颜色。所有儿童座椅都需要使用这种颜色来涂漆。

无论我尝试什么,我都无法访问父 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>
4

1 回答 1

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

因为嵌套在父级ItemsControl的内部ItemTemplate,因此它将具有Area实例,因为它是 DataContext。

于 2013-07-29T21:24:34.277 回答