2016-08-09 128 views
0

I Spalten in einem Datennetz über Code-Behind wie folgt zu erstellen:Hintergrundfarbe ändern von Datagrid-Zelle je nach Objekteigenschaft

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

Ich möchte die Zellen ihre Hintergrundfarbe auf einen bestimmten Wert in Abhängigkeit von der sich ändern Artikel Eigenschaft "DeltaValues".

Gibt es eine Bindung, die ich für die Spalten von Code-Behind setzen könnte, um dieses Verhalten zu erreichen?

Irgendwelche Ideen?

+0

XAML kann nur übersetzt werden, so gibt es viele Lösungen für diese: http://stackoverflow.com/questions/5549617/change-datagrid-cell -colour-based-on-values ​​/ 5551986 # 5551986 –

Antwort

1

Ich habe keine Codes getestet. Ich bin mir nicht sicher DataGridCell.ContentProperty richtige Immobilie ist .:

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

oder Version mit Konverter.

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

und sehr einfache Konverterklasse:

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

Okay. Und wie binde ich so im Hintergrund? –

+0

Ihr bindender Hintergrund in CellTemplate. Sobald du Code schreibst. – Michal

+0

Können Sie mir ein Beispiel geben? –