如何以 ListViewItem 的样式访问 ListViewItem 的 DataContext?

How do you access the DataContext of a ListViewItem in the style of the ListViewItem?

我有一个 ObservableCollection<Foo> fooList,下面是一个 MasterDetailsView 的代码,这只是一个爱好者 ListView:

<controls:MasterDetailsView
            Grid.Row="1"
            x:Name="MasterDetailsViewControl"
            ItemsSource="{x:Bind fooList}"
            SelectedItem="{x:Bind Selected, Mode=OneWay}"
            ItemTemplate="{StaticResource ItemTemplate}"
            DetailsTemplate="{StaticResource DetailsTemplate}"
            NoSelectionContentTemplate="{StaticResource NoSelectionContentTemplate}"
            BorderBrush="Transparent">
    <controls:MasterDetailsView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Background">
                <Setter.Value>
                    <Binding Path="PathToFooBrushGoesHere" />
                </Setter.Value>
            </Setter>
        </Style>
    </controls:MasterDetailsView.ItemContainerStyle>
</controls:MasterDetailsView>

每个 foo 都有一个单独的 属性 foo.Brush,我想用它来绘制 ListViewItem 的背景。我无法弄清楚我需要在 PathToFooBrushGoesHere 中输入什么才能让 ListViewItem 访问具有 Brushfoo 的 属性。

我的想法是可以通过设置不同的 DataContext 来实现,但我不知道如何才能访问 [=23] 的 DataContext =] ListViewItem 样式。

应该如何处理这种造型?

您可以通过将 Brush 属性 绑定到 MasterDetailsViewItemTemplate 来实现此效果。

首先,将MasterDetailsView.ItemContainerStyle更改如下,将ListViewItemVerticalContentAlignmentHorizontalContentAlignment属性设置为Stretch

<controls:MasterDetailsView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    </Style>
</controls:MasterDetailsView.ItemContainerStyle>

然后将Brush属性绑定到MasterDetailsViewItemTemplate

<DataTemplate x:Key="ItemTemplate" x:DataType="local:Foo">
    <Grid Background="{x:Bind Brush}">
        <TextBlock Text="ItemTemplate"/>
    </Grid>
</DataTemplate>