我正在尝试在XAML中为数据网格添加验证。
目前,我创建了一个方法,它检查3个文本框是否有效输入,如果为false,则将数据网格绑定的集合中的值设置为true或false。这部分工作正常。
我现在遇到的问题是让它真正起作用。
我创建了一个转换器:
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool isRowValid = ((bool)value);
ConsoleColor validColour = ConsoleColor.Green;
ConsoleColor invalidColour = ConsoleColor.Red;
if (isRowValid)
{
return validColour;
}
else
{
return invalidColour;
}
}
因此,当行无效时,它将显示红色,当有效时,它将显示绿色。
当行失去焦点时,将调用验证每一行的方法,默认情况下,每行都设置为无效。
我一直试图通过
为每一行设置背景<DataGrid.RowBackground>
<SolidColorBrush Color="{Binding Path=IsRowValid, Converter={StaticResource RowValidConverter}}" />
</DataGrid.RowBackground>
但理想情况下,我希望这只能调整文字颜色,而不是背景。
非常感谢任何关于如何实现这一点的建议,
感谢。
答案 0 :(得分:2)
如果我正确理解您的问题,那么我认为更简单的方法是在RowStyle中添加Validation.HasError
的触发器
<DataGrid ...>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="TextElement.Foreground" Value="Green"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="TextElement.Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<!--...-->
</DataGrid>
或者,如果您在ViewModel中使用名为IsRowValid
的属性以其他方式控制此操作,则可以将触发器更改为DataTrigger
<DataTrigger Binding="{Binding IsRowValid}" Value="True">
<Setter Property="TextElement.Foreground" Value="Red"/>
</DataTrigger>