【问题标题】:How to check if any row is invalid?如何检查任何行是否无效?
【发布时间】: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。当UIElementValidationRule(例如DataGridRow)失去焦点时(例如通过单击另一个DataGridRow 或单击保存按钮),会发生这种情况(大多数情况下)。

标签: c# wpf validation xaml datagrid


【解决方案1】:

我用普通的 Grid 做过一次,但 AFAIK 它适用于 DataGrids。参考this blog

如果这不起作用,您可以手动搜索,如 this question 中所示。

【讨论】:

  • 似乎 DataGrid 缺少一个有用的功能。我会接受您的回复作为答案,但坦率地说,我期待这样一个控件提供更强大的功能。
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2010-12-20
  • 2011-08-01
  • 1970-01-01
相关资源
最近更新 更多