如何在 WPF 中分别更改 ListView 列(每行的每个单元格)的颜色?

How to change the color of a ListView column (each cell of each row) seperately in WPF?

我有一个定期更新和显示一些分析数据的 ListView。
每行代表一个不同的来源,而列显示它的分析值。

我想要的是仅在满足特定条件时更改单个单元格的背景颜色或字体颜色。

例如,如果“价格”列的值小于 X,它将变为红色背景或字体。
但我不希望整行都在改变颜色,而只是那特定行的“价格”列。

我知道如何改变整行的颜色,这里也有很多这样的例子,例如使用绑定。但我想知道是否有办法改变单个单元格的背景颜色或字体颜色。

谢谢。

编辑:
感谢 Sean Manton 的回复,我很容易地解决了这个问题。令人惊讶的是,我在搜索此内容时找不到任何结果,所以我也用一个工作示例添加了我自己的答案。

GridViewColumn 有一个 CellTemplate 属性,您可以指向单元格的 DataTemplate。在 DataTemplate 中,您可以使用绑定转换器将值映射到所需的样式。

我搜索了CellTemplate的用法后很轻松的解决了问题,感谢Sean Manton的回复

不知道为什么我在搜索 ListView 列或单元格的更改颜色时很难找到它,结果只显示“行”而不是“列”。

此外,这里的大多数答案总是使用绑定转换器,这似乎是更好的方法,但我注意到即使没有任何转换器也可以使用非常简单的代码。

所以我会在这里写下这个例子,以防有人觉得它有用:

XAML设计:

<ListView x:name="myListView">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" />
            <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
            <GridViewColumn Header="Price">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Price}" Foreground="{Binding Price_Color}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

至于 C# 代码,我们只需要制作一个包含“Price_Color”字符串值的列表即可。

public class myListViewItem
{
    public int ID { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
    public string Price_Color { get; set; }
}

现在我们可以很容易地添加和自定义我们想要的颜色的项目,如下所示:

List<myListViewItem> myItemList = new List<myListViewItem>();
myItemList.Add(new myListViewItem { ID = 1, Name = "Book", Price = 15.7, Price_Color = "Green" });
myItemList.Add(new myListViewItem { ID = 2, Name = "Laptop", Price = 4000, Price_Color = "Red" });
myItemList.Add(new myListViewItem { ID = 2, Name = "Mobile", Price = 3000, Price_Color = "#FFF2CC" });
MyListView.ItemsSource = myItemList;

现在我们的 ListView 中将有 3 行,每行仅“价格”列具有不同的字体颜色。