在DataGrid中绑定通用单元格属性

本文关键字:单元格 属性 绑定 DataGrid | 更新日期: 2023-09-27 18:14:32

我试图为我的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没有写转换器或这样的?

谢谢。

在DataGrid中绑定通用单元格属性

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>