Die Frage auf Codekicker lautete:

Wie kann ich in einem DataGrid eine Zelle je nach Inhalt formatieren? So wie die Bedingte Formatierung in Excel oder Access, also rot bei negativen Werten und grün bei positiven Werten. Hab schon mein Glück mit einem Converter versucht, aber das klappt irgendwie nicht.

Ich habe dazu einen Converter geschrieben, der den Wert entgegen nimmt, diesen auf kleiner 0 prüft und das Resultat als Brush für den Hintergrund zurück gibt. Ist der Wert kleiner 0 wird grün, ist der Wert größer 0 wir rot zurück gegeben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value.ToString() == String.Empty)
        return null;
 
    decimal val = decimal.Parse(value.ToString());
 
    return (val < 0) ? Brushes.Red : Brushes.Green;
}
 
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    return value;
}
}

Im XAML muss in der Windows Resource der Converter referenziert werden:

1
2
3
<Window.Resources>
    <Converters:SignedUnsignedConverter x:Key="SignedUnsigned" />
</Window.Resources>

Das DataGrid verwendet den Converter wie folgt:

1
2
3
4
5
6
7
8
9
10
11
12
<DataGrid Name="dataGrid" AutoGenerateColumns="False" MouseDoubleClick="dataGrid_MouseDoubleClick">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
        <DataGridTemplateColumn Header="Price">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Price}" Background="{Binding Price, Converter={StaticResource SignedUnsigned}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Auch in einer TextBox kann der Converter verwendet werden:

1
<TextBox Name="textBox" Background="{Binding ElementName=textBox, Path=Text, Converter={StaticResource SignedUnsigned}}"/>


Viel Spaß beim entwickeln : )

Bedingte Formatierung im Datagrid – WPF Quicky
Markiert in: