首页 文章

根据对象属性更改datagrid单元格的背景颜色

提问于
浏览
0

我通过代码隐藏在数据网格中创建列,如下所示:

DataGridTextColumn dgtc1 = new DataGridTextColumn();
dgtc1.Header = "Feldname";
dgtc1.Binding = new Binding("FieldName");
dataGrid.Columns.Add(dgtc1);
DataGridTextColumn dgtc2 = new DataGridTextColumn();
dgtc2.Header = "Masterwert";
dgtc2.Binding = new Binding("MasterValue");
dataGrid.Columns.Add(dgtc2);
int counter = 0;
foreach (DBManager database in databases)
{
    if (!database.IsMaster)
    {
        DataGridTextColumn dgtc = new DataGridTextColumn();
        dgtc.Header = database.DisplayName;
        dgtc.Binding = new Binding("LocationValues[" + counter + "]");
        dataGrid.Columns.Add(dgtc);
        counter++;
    }
}

我希望单元格将其背景颜色更改为特定值,具体取决于items属性“DeltaValues” .

if(DeltaValues[i] == true)
   //Change the background color to x
else
   //Do nothing

是否有绑定我可以为代码隐藏的列设置以实现此行为?

有任何想法吗?

1 回答

  • 1

    我没有测试代码 . 我不确定DataGridCell.ContentProperty属性是否正确:

    if (!database.IsMaster)
    {
        DataGridTextColumn dgtc = new DataGridTextColumn();
        dgtc.Header = database.DisplayName;
        dgtc.Binding = new Binding("LocationValues[" + counter + "]");
    
        Setter setter = new Setter();
        setter.Property = Control.BackgroundProperty;            
        setter.Value = Brushes.Red;
    
        Trigger trigger = new Trigger();
        trigger.Property = DataGridCell.ContentProperty;
        trigger.Value = true;
        trigger.Setters.Add(setter);
    
        dgtc.CellStyle.Triggers.Add(trigger);
    
        dataGrid.Columns.Add(dgtc);
        counter++;
    }
    

    或带转换器的版本 .

    {
            if (!database.IsMaster)
            {
                DataGridTextColumn dgtc = new DataGridTextColumn();
                dgtc.Header = database.DisplayName;
                dgtc.Binding = new Binding("LocationValues[" + counter + "]");
    
                Converter converter = new Converter();
    
                Binding binding = new Binding(DeltaValues[i]);
                binding.Converter = converter;
    
                dgtc.CellStyle.Setters.Add(new Setter(Control.BackgroundProperty, binding));
    
                dataGrid.Columns.Add(dgtc);
                counter++;
            }
    
    
            return this;
        }
    

    非常简单的转换器类:

    public class Converter : IValueConverter
    {
    
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        if ((bool)value) return Brushes.Red;
    
        return null;
      }
    
      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        new throw Exception();
      }
    }
    

相关问题