WPF / MVVM / XAML DataGridView-根据单元格值设置单元格背景色

时间:2020-01-14 05:23:11

标签: wpf xaml mvvm datagridview

我需要基于单元格的值在datagridview中设置特定单元格的背景色。 在下面的代码中,如果用户处于活动状态,我想将“活动”单元格的背景颜色设置为绿色。

                  AutoGenerateColumns="False"
                  CanUserAddRows="False" 
                  CanUserDeleteRows="False"
                  IsReadOnly="True"
                  ItemsSource="{ Binding Path=Users }" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="User ID" Binding="{Binding UserID}" Width="Auto"/>
                <DataGridTextColumn Header="Surname" Binding="{Binding Surname}" Width="Auto"/>
                <DataGridTextColumn Header="Given Names" Binding="{Binding GivenNames}" Width="Auto"/>
                <DataGridTextColumn Header="Active" 
                                    Binding="{Binding Active, Converter={ StaticResource booleanToYesNoConverter} }" 
                                    Width="Auto"/>
            </DataGrid.Columns>
        </DataGrid>

我是WPF和MVVM的新手,我不知道最好的解决方案是什么。我一直在考虑使用值转换器设置背景属性的方法:

<DataGridTextColumn Header="Active" 
                    Binding="{Binding Active, Converter={ StaticResource booleanToYesNoConverter} }"
                    Background="{ Binding Active, Converter={ StaticResource activeInactiveBackgroundColorConverter }}"
                    Width="Auto"/>

我已经为其他控件(StatusBarItem)完成了此操作,并且效果很好,但是对于datagridview我却无法做到。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

通过给DataGridTextColumn单元格样式尝试这种方式

<DataGridTextColumn  Binding="{Binding Active}"
 Header="Active" 
  Width="Auto">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
           <Setter Property="Background" Value="{ Binding Active, Converter={ StaticResource activeInactiveBackgroundColorConverter }}"/>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>