在DataGrid中绑定通用单元属性

时间:2016-10-24 13:49:21

标签: c# wpf

我正在尝试为DataGrid中具有特定值的每个单元格设置特定颜色。我在网上看到了很多,但我没有找到一个接近我的情况。 基本上我有这个DataGrid结构:

<DataGrid ItemsSource="{Binding MatchService.Matches}" AutoGenerateColumns="False" 
                      CanUserAddRows="false" IsReadOnly="True">
    <DataGrid.Columns>
        <DataGridTextColumn Header="{DynamicResource championship}" Binding="{Binding Competition}"/>
        <DataGridTextColumn Header="1" Binding="{Binding HomeWin}"/>
        <DataGridTextColumn Header="X" Binding="{Binding Draw}"/>
    </DataGrid.Columns>

所以我需要使用纯xaml解决方案,特别是处理所有单元格值的通用样式。例如,如果HomeWin单元格的值为<50,则单元格背景将为red,如果单元格值为>60,则背景将为绿色。

如何创建默认样式并为每个DataGridTextColumn绑定它而不使用write converter等?

感谢。

1 个答案:

答案 0 :(得分:1)

1.创建一个NumberToBrush转换器,如下所示:

[ValueConversion(typeof(int), typeof(Brush))]
public class NumberToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int val = (int)value;
        if (val < 50)
            return Brushes.Red;
        if (val > 60)
            return Brushes.Green;

        return Brushes.Transparent;
    }

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

2.将其添加到您的查看资源:

<Window.Resources>
    <wpfApplication1:NumberToBrushConverter x:Key="NumberToBrushConverter"/>
</Window.Resources>

3.使用DataGridTemplateColumn而不是DataGridTextColumn并重新定义DataTemplate以使用带有绑定值的转换器:

   <DataGrid.Columns>
            <DataGridTemplateColumn Header="X">
                <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate DataType="wpfApplication1:YourModel">
                            <TextBox Text="{Binding X}" Background="{Binding Path=X, Converter={StaticResource NumberToBrushConverter}}" />
                        </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
       </DataGrid.Columns>