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且ColumnC为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与目标类型DataGridCell不匹配,现在我被卡住了。在Google和这里看了一个小时,但找不到符合我要求的匹配项,希望有人能提供帮助。
我不相信您可以将列绑定到转换器的参数,所以我不能追求这一点,我确实需要传递整行,以便可以检查其他相关字段或将多个绑定传递给转换器。
我正在做的快速摘要。我有一个Datagrid,它的ItemsSource是动态设置的,并且我正在使用DataGridTemplateColumns来确定可用的下拉选项以及显示...