WPF xaml:如何使用自动生成的列验证 DataGrid 中的单元格
Posted
技术标签:
【中文标题】WPF xaml:如何使用自动生成的列验证 DataGrid 中的单元格【英文标题】:WPF xaml: How to validate Cells in DataGrid with automatically generated Columns 【发布时间】:2021-12-29 06:20:45 【问题描述】:如果值无效,如何在自动生成的 DataGrid(来自 DataTable)中添加单元格验证并将单元格设置为红色?
这是我的数据网格:
<DataGrid Grid.Row="2"
Margin="5"
Background="Transparent"
MaxHeight="300"
MaxWidth="500"
ScrollViewer.CanContentScroll="True"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ItemsSource="Binding DataTable"
HeadersVisibility="None"
CellStyle="StaticResource tableCellTheme"
CanUserAddRows="False">
我也加了
<DataGrid.RowValidationRules>
<validation:DataGridValidation ValidationStep="UpdatedValue" />
</DataGrid.RowValidationRules>
但我不想评估整行,更重要的是,如果返回 false,我不知道如何将违规单元格设置为红色... 感谢您的帮助!
【问题讨论】:
【参考方案1】:您必须处理DataGrid.AutoGeneratingColumn
事件,获取对列绑定的引用,然后启用绑定验证并将ValidationRule
附加到它:
MainWindow.xaml
<DataGrid AutoGeneratingColumn="EnableCellValidation_OnAutoGeneratingColumn" />
MainWindow.xaml.cs
private void EnableCellValidation_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
if (e.Column is DataGridBoundColumn column)
var columnBinding = column.Binding as Binding;
columnBinding.ValidatesOnDataErrors = true;
columnBinding.ValidationRules.Add(new DataGridValidation());
【讨论】:
谢谢,这对我有帮助!然而,。验证仅在输入数字时有效,如果我输入字符,则不会调用验证方法。你知道为什么吗?分别,如何解决这个问题?此外,在我的对角线上,我有文本而不是行名和列名(因为我的数据表是对称的)。我可以将这些单独的单元格设置为不可编辑吗?谢谢你的帮助!附:你是从哪里学到这些东西的?很容易找到 c# 的好资源,但不知何故我在学习 xaml 时遇到了困难...... 绑定验证未检测到输入。因此,它不区分数字和字母输入。输入只是传递给 ValidationRule.Validate 方法。如果没有按预期执行,您必须检查规则的实施。为防止特定单元格可编辑,您必须处理DataGrid.BeginningEdit
事件并将事件 args 对象设置为取消以避免进入编辑模式。
给自己找一个小项目。这是应用您从阅读中学到的知识的最佳方式。您还会遇到问题,解决后会提高您的知识(经验)。以上是关于WPF xaml:如何使用自动生成的列验证 DataGrid 中的单元格的主要内容,如果未能解决你的问题,请参考以下文章
禁用 WPF MVVM 中 DataGrid 中自动生成的列的排序