如何使用数据绑定在WPF中设置ListView项的背景颜色?

4

我有一个ListView,它绑定到一个ObservableCollection类型的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>
2个回答

8
尝试使用“样式”属性。将此代码添加到ListView中,这样应该可以将ListViewItems的背景设置为Brush颜色。
<ListView>
   <ListView.ItemContainerStyle>
      <Style TargetType="{x:Type ListViewItem}">
           <Setter Property="Background" Value="{Binding Brush}" />
      </Style>
   </ListView.ItemContainerStyle>

   ...

</ListView>

奇怪的是,对我来说这似乎不起作用——背景颜色仍然是白色。这似乎与 https://stackoverflow.com/questions/32926063/wpf-binding-property-to-an-object-in-style?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa 有关。 - MetaColon

0

我无法让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绑定逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接