在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
没有写转换器或这样的?
谢谢。
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>