2016-08-09 3 views
0

я создаю столбцы в сетке данных с помощью кода за так:Изменить цвет фона DataGrid ячейки в зависимости от объекта недвижимости

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++; 
    } 
} 

Я хочу, чтобы клетки, чтобы изменить их цвет фона определенного значения в зависимости от объектов недвижимости "DeltaValues".

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

Есть ли привязка, которую я мог бы установить для столбцов с кодом для достижения такого поведения?

Любые идеи?

+0

XAML можно просто перевести, так что есть много решений этого: http://stackoverflow.com/questions/5549617/change-datagrid-cell -colour-based-on-values ​​/ 5551986 # 5551986 –

ответ

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(); 
    } 
} 
+0

Хорошо. И как мне привязать это в фоновом режиме? –

+0

Вы привязывающий фон в CellTemplate. Как только вы напишете код. – Michal

+0

Не могли бы вы привести мне пример? –

Смежные вопросы