如何根据使用数据绑定的属性值设置DataGrid的行背景?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (62)

在我的XAML代码中,我想Background根据一个特定行中对象的值来设置每行的颜色。我有一个ObservableCollectionz,并且每个z有一个叫做财产State。我在这样的事情中开始了这样的事情DataGrid

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="Background" 
                Value="{Binding z.StateId, Converter={StaticResource StateIdToColorConverter}}"/>
     </Style>
</DataGrid.RowStyle>

这是一种错误的方法,因为x不是ViewModel类中的属性。

在我的ViewModel类我有一个ObservableCollection<z>是在ItemsSourceDataGrid,和SelectedItem类型z

我可以将颜色绑定到SelectedItem,但这只会改变其中的一行DataGrid

我怎么能根据一个属性改变这行背景颜色?

提问于
用户回答回答于

使用DataTrigger

    <DataGrid ItemsSource="{Binding YourItemsSource}">
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow"> 
                <Style.Triggers>
                    <DataTrigger Binding="{Binding State}" Value="State1">
                        <Setter Property="Background" Value="Red"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding State}" Value="State2">
                        <Setter Property="Background" Value="Green"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>
用户回答回答于
 <DataGrid.RowStyle>
                        <Style TargetType="DataGridRow">
                            <Setter Property="Background" >
                               <Setter.Value>
                                    <Binding Path="State" Converter="{StaticResource BooleanToBrushConverter}">
                                        <Binding.ConverterParameter>
                                            <x:Array Type="SolidColorBrush">
                                                <SolidColorBrush Color="{StaticResource RedColor}"/>
                                                <SolidColorBrush Color="{StaticResource TransparentColor}"/>
                                            </x:Array>
                                        </Binding.ConverterParameter>
                                    </Binding>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGrid.RowStyle>

其中BooleanToBrush转换器是以下类:

  public class BooleanToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return Brushes.Transparent;

        Brush[] brushes = parameter as Brush[];
        if (brushes == null)
            return Brushes.Transparent;

        bool isTrue;
        bool.TryParse(value.ToString(), out isTrue);

        if (isTrue)
        {
            var brush =  (SolidColorBrush)brushes[0];
            return brush ?? Brushes.Transparent;
        }
        else
        {
            var brush = (SolidColorBrush)brushes[1];
            return brush ?? Brushes.Transparent;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

所属标签

可能回答问题的人

  • 腾讯云数据库 TencentDB

    腾讯云 · 产品团队 (已认证)

    304 粉丝2 提问51 回答
  • EatRice

    17 粉丝0 提问187 回答
  • 华讯云

    1 粉丝0 提问156 回答
  • 最爱开车啦

    9 粉丝503 提问1.7K 回答

扫码关注云+社区

领取腾讯云代金券