【发布时间】:2016-01-16 17:27:48
【问题描述】:
我注意到在绑定到整数类型属性的网格列中输入非数字会导致单元格与我的红色框相接,并且该行的最左侧有一个感叹号。请注意,我没有明确地实现它——这是默认行为。
在查看了网格、源项、单元格等的不同属性后,我找不到任何可以给我一个直接布尔值的东西,告诉我任何单元格都被错误地填写了.
如何检查是否有任何行/单元格(以及可能是哪一个)被无效填充?
我已经检查了MSDN 并没有变得更聪明。我已经玩过下面的代码,但该方法中的断点甚至没有被命中。
后面的代码
public class DonkeyValidator : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value is Donkey)
return ValidationResult.ValidResult;
return new ValidationResult(false, "Not a donkey!");
}
}
标记
<DataGrid AutoGenerateColumns="False" ...>
<DataGrid.RowValidationRules>
<dispatcher:DonkeyValidator ValidationStep="UpdatedValue" />
</DataGrid.RowValidationRules>
<DataGrid.Columns> ... </DataGrid.Columns>
</DataGrid>
请注意,我不是在为用户寻找高级反馈策略。我有一个 Save 按钮,我希望检查是否应该继续或停止它的 OnClick 方法。
【问题讨论】:
-
什么是
DonkeyValidator?你的班级名称是ThingValidator。 -
错字。我尝试了不同的方法并错误地粘贴了。问题仍然是一样的(加上我已经更正了这个例子)。好眼睛,伙计。
-
您的代码对我来说很好用。
ValidationRule每次 Binding-Source 更改时都会触发(例如,当DataGridCell更改然后失去焦点时)。所以问题可能出在DataGrid中的数据绑定中。 -
@Bahman_Aries 可能是这样。我会检查以确保。但是,实际的问题是如何检查整体有效的状态。在点击保存并关闭之前,可以这么说。
-
每次输入值(绑定目标)传输到绑定源时,绑定引擎都会检查与绑定关联的每个
ValidationRule。当UIElement和ValidationRule(例如DataGridRow)失去焦点时(例如通过单击另一个DataGridRow或单击保存按钮),会发生这种情况(大多数情况下)。
标签: c# wpf validation xaml datagrid