WPF从CellStyle绑定到DataGrid上下文

时间:2015-11-04 15:05:48

标签: c# wpf data-binding datagrid

我有一个WPF DataGrid,它绑定到具有一堆可绑定属性的可观察RowObject集合。为了填写表中的数据,我添加了DataGridTextColumns,它绑定到RowObjects的属性。例如:

<DataGrid ItemsSource={Binding RowCollection}>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Col1" Binding={Binding Property1Name, Mode=OneTime} IsReadOnly="True" />
        <DataGridTextColumn Header="Col2" Binding={Binding Property2Name, Mode=OneTime} IsReadOnly="True" />
        <DataGridTextColumn Header="Col3" Binding={Binding Property3Name, Mode=OneTime} IsReadOnly="True" />
    </DataGrid.Columns>
</DataGrid>

假设Property3是一个整数。我希望Column3中的单元格在它们为负时突出显示为红色,在为零时突出显示为黄色,当它为正时则为绿色。我的第一个想法是将System.Windows.Media.Color绑定到DataGridTextColumn的CellStyle,但这似乎不能直接工作。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这并不容易,但您可以为每个单元格使用转换器 背景

一个单元格的样式:

<Style x:Key="Col1DataGridCell" TargetType="DataGridCell">
    <Setter Property="Background" Value="{Binding Converter={StaticResource Col1Converter}}" />
</Style>

一个单元格的转换器:

public class Col1Converter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        var result = (RowObject)value;

        Color color;
        if (result.Value < 0) {
            color = Colors.Red;
        }
        else if (result.Value == 0) {
            color = Colors.Yellow;
        }
        else {
            color = Colors.Green;
        }

        return new SolidColorBrush(color);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }
}

在DataGrid中使用:

<DataGridTextColumn Header="Col1" Style={StaticResource Col1DataGridCell} Binding={Binding Property1Name, Mode=OneTime} IsReadOnly="True" />

答案 1 :(得分:0)

我建议你使用在IValueConverter

的帮助下改变细胞颜色的Style

选中此项:MSDN BLOG并进行实验。

祝你好运。