Ich bin langsam am Verzweifeln. Seite Tagen google ich nach einer Lösung, allerdings funktionieren bei mir die dort angebotenen Lösungen nicht.
Das Problem: Ich habe eine Liste von Daten. Diese Liste erbt von ObservableCollection. Diese Liste ist an ein WPF-DataGrid gebunden, funktioniert auch alles sehr schön. Nun gibt es eine Spalte, die den Typ eines Records als String angibt. Dieser Typ ("E", "P" oder "C") soll in der DataGrid-Spalte als Farbe angezeigt werden - tut es aber nicht, egal, was ich versuche.
Der aktuelle Lösungsansatz ist: Die Griddefinition:
[ValueConversion(typeof(string), typeof(SolidBrush))] public class ElementColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string type = (value ?? String.Empty).ToString(); SolidBrush brush = new SolidBrush(Color.White);
switch (type) { case "E": brush = new SolidBrush(Color.Green); break;
case "P": brush = new SolidBrush(Color.Orange); break;
case "C": brush = new SolidBrush(Color.Yellow); break; }
return brush; }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { string result = String.Empty; SolidBrush brush = (SolidBrush)(value ?? new SolidBrush(Color.White));
if(brush.Color == Color.Green) result = "E"; else if (brush.Color == Color.Orange) result = "P"; else if (brush.Color == Color.Yellow) result = "C";
return result; } }
Das Property:
public string EType { get { return _eType; } set { if (_eType != value) { _eType = value; OnPropertyChanged("EType"); } } }
Mit Breakpoints sehe ich, dass der Converter angesprochen wird und die richtigen Farben auch zurückgegeben werden. Jedoch bleibt der betreffende Zellenhintergrund immer weiß.
Nein, da fehlt nichts. Ich habe mir nur gespart, den xmlns inklusive den key darauf auch noch hier einzufügen. Compilieren und Ausführen geht ja, es passiert halt nix.
<TextBlock Text="{Binding EType}" Background="{Binding EType, Converter={StaticResource ElementColorC}}" />
da hinten irgendwas fehlt (ElementColorConverter?)
kenn mich mit wpf nicht so gut aus.