使用C#WPF DataGrid DataGridTemplateColumn时绑定行而不是单元格到转换器。

问题描述 投票:0回答:1
我正在做的快速摘要。我有一个动态设置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且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来确定可用的下拉选项以及显示...

c# wpf datagrid ivalueconverter datagridtemplatecolumn
1个回答
0
投票
尽管提供了有用的注释,但随后的验证仍然有效,但编辑后并没有刷新单元格样式。因此,我更改了方法,并使用以下解决方案代替了多值转换器。
© www.soinside.com 2019 - 2024. All rights reserved.