从listview内部获取父数据上下文刷

本文关键字:数据 上下文 获取 listview 内部 | 更新日期: 2023-09-27 18:03:35

我得到了以下信息:

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

数据上下文看起来像这样:

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

我将listview与所有项绑定。每个项目包含一个名称,该名称在listview中显示得很好。

问题是,我希望所有项目内的DataTemplate有前景设置为画笔。对于上面的代码,这是不可能的,因为当我在DataTemplate内部时,我绑定到发送进来的项。问题,我如何绑定到"父数据上下文",以获得正确的前景颜色?

从listview内部获取父数据上下文刷

你可以在绑定中使用 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>