Возможно, вам нужно использовать пользовательские столбцы, тогда вы можете передать всю строку в конвертер, используя ConverterParameter
для указания текущего столбца, чтобы вы могли сравнить все значения:
<DataGridTextColumn Binding="{Binding Column1}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background"
Value="{Binding Converter={StaticResource ValueToBrushConverter},
ConverterParameter=1}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Column2}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background"
Value="{Binding Converter={StaticResource ValueToBrushConverter},
ConverterParameter=2}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<!-- ... -->
Я не совсем схожу с вашей таблицей, но вы, вероятно, сможете выяснить, как самостоятельно вернуть правильное значение в конвертере.
Скелет конвертера может быть примерно таким:
public class ValueToBrushConverter : IValueConverter
{
/// <summary>
/// 1st Indexer: Columns
/// 2nd Indexer: Options
/// </summary>
Brush[,] _brushMatrix = new Brush[5,4]
{
{ Brushes.Gray, Brushes.Gray, Brushes.Gray, Brushes.Gray },
{ Brushes.Gray, Brushes.Red, Brushes.Gray, Brushes.Blue },
{ Brushes.Gray, Brushes.Red, Brushes.Gray, Brushes.Blue },
{ Brushes.Gray, Brushes.Gray, Brushes.Red, Brushes.Blue },
{ Brushes.Gray, Brushes.Gray, Brushes.Red, Brushes.Blue }
};
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
RowDataItem item = value as RowDataItem;
int currentColumn = int.Parse(parameter as string);
int currentRowOption;
#region Internal logic here, e.g
if (item.Col1 == "I" && item.Col3 == "Love" && item.Col2 == "Converters")
{
currentRowOption = 1;
}
//...
#endregion
return _brushMatrix[currentColumn, currentRowOption];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}