WPF:检测C#代码中的行验证错误

Tho*_*mar 3 c# wpf .net-4.0

我想要完成一个非常简单的任务,但是到目前为止,SO或其他方面的解决方案都没有帮助我:

我有一个WPF DataGrid,它绑定到一个类型化的数据集.当我单击窗口中的"确定"按钮时,我想检测当前是否存在任何行验证错误.我想显示一个消息框并告诉用户解决这些错误.

我怎样才能做到这一点?

编辑
为了使我的问题更精确:

我要绑定的类型化数据集是一个包含表的简单数据集.这些表是通过调用WCF服务填充的,表中有5个文本列.其中一些列具有长度约束(例如,一列可能只有5个字符).

ItemsSource我的GridView是在代码中设置如下:

dgvData.ItemsSource = m_dataModel.TableName;
Run Code Online (Sandbox Code Playgroud)

如果我在列中输入一些文本,一切都很好.在所述列中输入5个以上的字符,行旁边会显示红色行错误标记.我还没有进行任何自定义验证.

我可以看到红色感叹号,但是我无法在代码中确定它是否可见.我试过:

  • 使用数据集的HasErrors属性(返回false)
  • Validation.GetHasErrors(dgvData)也回来false
  • HB在他的评论中提到了解决方案,但它没有奏效

我在这里不知所措 - 必须有一个简单的方法吗?

Tho*_*mar 5

好的,我已经解决了.以下是我想要的:

public static DataGridRow GetRow(DataGrid grid, int index)
{
    DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
    if (row == null)
    {
        // May be virtualized, bring into view and try again.
        grid.UpdateLayout();
        grid.ScrollIntoView(grid.Items[index]);
        row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
    }
    return row;
}
Run Code Online (Sandbox Code Playgroud)

在我的"确定"按钮的代码中,我做:

for (int i = 0; i < dgvData.Items.Count; i++)
{
    DataGridRow row = GetRow(dgvData, i);
    if (row != null && Validation.GetHasError(row))
    {
        hasDataGridErrors = true;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)