从listview中获取父datacontext画笔

时间:2014-05-14 17:54:40

标签: c# wpf binding wpf-controls

我得到了以下内容:

<ListView ItemsSource="{Binding Path=Items}">                        
     <ListView.ItemTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Path=Name}" Foreground="{Binding Path=GridTextColor}"></TextBlock>
         </DataTemplate>
     </ListView.ItemTemplate>
</ListView>

datacontext看起来像这样:

class{
 items = List with items (each row has a name property)
 GridTextColor = Brush
}

我将listview绑定到所有项目。每个项目都包含一个名称,该名称在列表视图中很好地显示。

问题是我希望DataTemplate中的所有项目都将Foreground设置为画笔。 使用上面的代码是不可能的,因为当我在DataTemplate内部时,我绑定到发送的项目。 问题,如何绑定到“父datacontext”以获得正确的前景色?

1 个答案:

答案 0 :(得分:2)

您可以在绑定中使用 RelativeSource 来获取父级的DataContext。

<TextBlock Text="{Binding Path=Name}"
           Foreground="{Binding Path=DataContext.GridTextColor,
                               RelativeSource={RelativeSource Mode=FindAncestor, 
                                                     AncestorType=ListView}}"/>

或在ListView上设置 x:Name 并使用 ElementName 进行绑定:

<ListView x:Name="myListView">
   ....
     <TextBlock Text="{Binding Path=Name}"
                Foreground="{Binding DataContext.GridTextColor,
                                     ElementName=myListView}" />
   ....
</ListView>