【问题标题】:How do I set the background color of a listview item in WPF using databinding?如何使用数据绑定在 WPF 中设置列​​表视图项的背景颜色?
【发布时间】:2025-12-14 15:30:01
【问题描述】:

我有一个绑定到 person 类型的可观察集合的列表视图。我将以下属性添加到我的 person 对象中:

public System.Windows.Media.SolidColorBrush Brush { get; set; }

如何通过绑定到此属性来设置列表视图中项目的颜色?下面是我的 XAML。

<Window x:Class="ObservableTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:ObservableTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Grid.Column="0" Margin="5,5,5,5">

            <TextBlock x:Name="lblName" Text="Name"></TextBlock>
            <TextBox x:Name="txtName"></TextBox>

            <TextBlock x:Name="lblAddress" Text="Address"></TextBlock>
            <TextBox x:Name="txtAddress"></TextBox>

            <Button Grid.Column="0" Width="100" Height="20" Margin="5,5,5,5" x:Name="btnNames" Click="btnNames_Click" Content="Add"></Button>           
        </StackPanel>

        <ListView x:Name="lstNames" Margin="5,5,5,5" Grid.Column="1" Grid.Row="0">
            <ListView.View>
                <GridView x:Name="grdName">
                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
                    <GridViewColumn Header="Address" DisplayMemberBinding="{Binding Address}"/>

                </GridView>
            </ListView.View>
        </ListView>               
    </Grid>
</Window>

【问题讨论】:

    标签: wpf xaml data-binding colors


    【解决方案1】:

    试试Style 属性。

    可以将此代码添加到ListView,然后它应该将ListViewItems的背景设置为Brush颜色。

    <ListView>
       <ListView.ItemContainerStyle>
          <Style TargetType="{x:Type ListViewItem}">
               <Setter Property="Background" Value="{Binding Brush}" />
          </Style>
       </ListView.ItemContainerStyle>
    
       ...
    
    </ListView>
    

    【讨论】:

    【解决方案2】:

    我无法得到 Florin-m 的答案,但这对我有用

    <ListView>
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding MyModelProperty}" Value="true">
                        <Setter Property="Background" Value="#ffffff" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.Resources>
        ...
    </ListView>
    

    根据口味调整 DataTrigger 绑定逻辑。

    【讨论】: