如何以 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
访问具有 Brush
的 foo
的 属性。
我的想法是可以通过设置不同的 DataContext
来实现,但我不知道如何才能访问 [=23] 的 DataContext
=] ListViewItem
样式。
应该如何处理这种造型?
您可以通过将 Brush
属性 绑定到 MasterDetailsView
的 ItemTemplate
来实现此效果。
首先,将MasterDetailsView.ItemContainerStyle
更改如下,将ListViewItem
的VerticalContentAlignment
和HorizontalContentAlignment
属性设置为Stretch
,
<controls:MasterDetailsView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</controls:MasterDetailsView.ItemContainerStyle>
然后将Brush
属性绑定到MasterDetailsView
的ItemTemplate
。
<DataTemplate x:Key="ItemTemplate" x:DataType="local:Foo">
<Grid Background="{x:Bind Brush}">
<TextBlock Text="ItemTemplate"/>
</Grid>
</DataTemplate>
我有一个 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
访问具有 Brush
的 foo
的 属性。
我的想法是可以通过设置不同的 DataContext
来实现,但我不知道如何才能访问 [=23] 的 DataContext
=] ListViewItem
样式。
应该如何处理这种造型?
您可以通过将 Brush
属性 绑定到 MasterDetailsView
的 ItemTemplate
来实现此效果。
首先,将MasterDetailsView.ItemContainerStyle
更改如下,将ListViewItem
的VerticalContentAlignment
和HorizontalContentAlignment
属性设置为Stretch
,
<controls:MasterDetailsView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</controls:MasterDetailsView.ItemContainerStyle>
然后将Brush
属性绑定到MasterDetailsView
的ItemTemplate
。
<DataTemplate x:Key="ItemTemplate" x:DataType="local:Foo">
<Grid Background="{x:Bind Brush}">
<TextBlock Text="ItemTemplate"/>
</Grid>
</DataTemplate>