У меня есть сетка данных, для которой динамически устанавливается ItemsSource, и я использую DataGridTemplateColumns для определения доступных параметров раскрывающегося списка, а также для отображения проверки. В случае проверки я закрашиваю фон ячейки красным, чтобы он был очевиден для пользователя. Я использую конвертер, чтобы сделать это так:
public class ExampleForSOBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = value as string;
switch (input)
{
case "0":
case "":
case null:
return Brushes.Red;
default:
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
И код стиля выглядит так:
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding NameOfColumnInDataRow, Converter={StaticResource ExampleForSOBrushConverter}}"/>
</Style>
</DataGridTemplateColumn.CellStyle>
Все, что это делает, это проверяет, введено ли значение в ячейку пусто, пусто или содержит 0 (выпадающий вариант по умолчанию для не выбранных). Пока это работает отлично, однако теперь мне нужно применить проверку для некоторых столбцов на основе других или с помощью других проверок, таких как длина текста. Например, если ColumnB равен 1, а Column C равен 3, или если ColumnD меньше 8 символов.
Мой план состоял в том, чтобы использовать параметры и передать строку следующим образом:
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding Path=., Converter={StaticResource MultipleValidatorConverter}, ConverterParameter=LAR}"/>
</Style>
</DataGridTemplateColumn.CellStyle>
И тогда конвертер будет выглядеть примерно так:
public class MultipleValidatorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
classNameUsedForItemsSource row = value as classNameUsedForItemsSource ;
string param = parameter as string;
if(param == "LAR")
{
if (param.Length < 8) return Brushes.Red;
}
// Other checks here based on parameter
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
Но, к сожалению, это вызывает ошибку, говоря, что DataGridRow не соответствует targetttype DataGridCell, и теперь я застрял. Посмотрел в гугле и тут, но не смог найти соответствия для моего требования.
Я не верю, что вы можете привязать столбцы к параметрам для конвертера, поэтому я не могу это сделать, мне действительно нужно пройти всю строку, чтобы я мог проверить другие связанные поля ИЛИ передать несколько привязок в конвертер.