数据网格行背景颜色绑定到数据源集合中单个项目的属性

Posted

技术标签:

【中文标题】数据网格行背景颜色绑定到数据源集合中单个项目的属性【英文标题】:Datagrid row background color bind to property in individual item from data source collection 【发布时间】:2015-11-06 06:42:31 【问题描述】:

我在 WPF 中有一个 DataGrid,我想将行的 BackgrounColor 绑定到我作为 ItemsSource 提供给数据网格的集合中各个项目的属性。

   public class Log: INotifyPropertyChanged

    private string _timestamp;
    private string _threadName;
    private string _userName;
    private string _message;
    private Brush _backgroundColor;

    public string Timestamp
    
        get  return _timestamp; 
        set
        
            if (_timestamp == value) return;
            _timestamp = value;
            NotifyPropertyChanged("Timestamp");
        
    
    public string ThreadName
    
        get  return _threadName; 
        set
        
            if (_threadName == value) return;
            _threadName = value;
            NotifyPropertyChanged("ThreadName");
        
    
    public string UserName
    
        get  return _userName; 
        set
        
            if (_userName == value) return;
            _userName = value;
            NotifyPropertyChanged("UserName");
        
    
    public string Message
    
        get  return _message; 
        set
        
            if (_message == value) return;
            _message = value;
            NotifyPropertyChanged("Message");
        
    

    public string BackgroundColor
    
        get  return _backgroundColor; 
        set
        
            if (_backgroundColor== value) return;
            _backgroundColor = value;
            NotifyPropertyChanged("BackgroundColor");
        
    


    public bool IsCustomLog = false;
    public string HighlightColor = null;

    public event PropertyChangedEventHandler PropertyChanged;

    //Constructor
    public Log(string timestamp, string threadName, string userName, string message, Brush backgroundColor)
    
        UserName = userName;
        Timestamp = timestamp;
        ThreadName = threadName;
        Message = message;
        BackgroundColor = backgroundColor;
    

    //Methods
    public void NotifyPropertyChanged(string propertyName)
    
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    

我正在尝试将数据网格行的 BackgroundColor 绑定到 Log 类中的 BackgroundColor 属性。

我尝试这样绑定它:

            <DataGrid.RowStyle>
            <Style TargetType="x:Type DataGridRow">
                <Setter Property="FontSize" Value="14"/>
                <Setter Property="FontFamily" Value="Arial"/>
                <Setter Property="BorderThickness" Value="0,0,2,2"/>
                <Setter Property="Background" Value="Binding BackgroundColor"/>
                <Setter Property="BorderBrush" Value="#CCCCCC"/>
            </Style>
        </DataGrid.RowStyle>

但它没有设置背景颜色。我不知道我做错了什么。

【问题讨论】:

【参考方案1】:

我不确定这是否是您的代码中的拼写错误,因为 _backgroundColorBrushBackgroundColorstring

public string BackgroundColor

    get  return _backgroundColor; 
    set
    
        if (_backgroundColor== value) return;
        _backgroundColor = value;
        NotifyPropertyChanged("BackgroundColor");
    

我建议您将 BackgroundColor 设为 Color,因为您的属性名称的“颜色”后缀,并像这样更改 XAML 中的“Setter”:

<Setter Property="Background">
    <SolidColorBrush Color="Binding BackgroundColor"/>
</Setter>

【讨论】:

以上是关于数据网格行背景颜色绑定到数据源集合中单个项目的属性的主要内容,如果未能解决你的问题,请参考以下文章

XAML 绑定到 CompositeCollection

WPF将DataGridTextColumn的背景颜色绑定为逐行着色

选择后更改整个数据网格行的背景颜色

在 Adob​​e Flex 中设置数据网格行的背景颜色

雷林鹏分享:jQuery EasyUI 数据网格 - 条件设置行背景颜色

在“绑定”数据网格视图中设置工具提示