我有一个绑定到 ThreadSafeObservableCollection 的列表视图。这些项目中的每一个的背景都设置为一个通过颜色转换器运行的枚举,这是这两个设置的代码。
<UserControl.Resources>
<EncoderView:EncoderStatusToColorConverter x:Key="ColorConverter"/>
<Style x:Key="ItemContStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="{Binding Converter={StaticResource ColorConverter}}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</UserControl.Resources>
我想要发生的是 listviewItem 的背景颜色将根据枚举值从 Red - Yellow - Green 变化。根据业务逻辑规则更新。这目前有效,但仅适用于项目的初始显示。当我更改 listItemView 绑定到的对象的“状态”属性时,背景不会更新。如果我从集合中删除对象,更改状态,然后再次将其添加到集合中,则背景会更新。
我已经尝试制作对象 IPropertyNotify,并在状态属性更改设置器上抛出事件,但这不起作用。
有谁知道我是否需要做一些特别的事情才能更新列表视图项目的背景。我也对如何解决这个问题的其他想法持开放态度,谢谢。这是 ListView 的 XAML。EncoderService.Encoders 是我的 Encoder 对象的 ThreadSafeObservableCollection。
<ListView AutomationProperties.AutomationId="FinishScreen"
ItemsSource="{Binding Path=EncoderService.Encoders}"
x:Name="DataListView" Grid.RowSpan="1" Grid.Row="1" Margin="5"
ItemContainerStyle="{StaticResource ItemContStyle}"
Background="Azure">
<ListView.View>
<GridView>
<GridViewColumn Header="MAC">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=MAC}" ToolTip="{Binding Path=MAC}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="IDF">...