0

我对 WPF 的 DataGrid 有疑问。我想在编辑时获取当前单元格的文本。问题是如果不先提交单元格,您将无法获得值。我想在提交之前先验证文本。

谢谢。

4

1 回答 1

0

你有不同的方法来做到这一点。

最干净的方法是IDataErrorInfo在您的模型中实现并ValidatesOnDataError=true在您的绑定中设置。(如果你不知道IDataErrorInfo,我真的鼓励你花一些时间来学习它,因为它是一个非常有用的工具并且非常易于使用)

另一种替代解决方案,它需要更少的代码,但可能不太干净:

您可以将事件处理程序添加到CellEditEnding(或覆盖DataGrid.OnCellEditEnding)并在提交之前验证输入的数据。如果验证失败,您只需取消 CellEditEnding 事件。

如果您覆盖,这是代码OnCellEditEnding(这几乎与添加事件处理程序完全相同)

我为你举了一个简单的例子,在这里我只是尝试解析输入的文本。您可以访问具有EditingElementa 属性的用户输入的文本DataGridCellEditEndingEventArgs

这是代码:

protected override void OnCellEditEnding(DataGridCellEditEndingEventArgs e)
        {
            try
            {
                // Try to parse the text
                double test = Double.Parse((e.EditingElement as TextBox).Text);
            }
            catch (FormatException)
            {
                // Mark the current editing element as invalid and cancel the event
                TextBox text = e.EditingElement as TextBox;
                BindingExpression bindingExpression =
                    BindingOperations.GetBindingExpression(text, TextBox.TextProperty);
                BindingExpressionBase bindingExpressionBase =
                    BindingOperations.GetBindingExpressionBase(text, TextBox.TextProperty);
                ValidationError validationError =
                    new ValidationError(new ExceptionValidationRule(), bindingExpression);
                Validation.MarkInvalid(bindingExpressionBase, validationError);
                e.Cancel = true;
            }
            base.OnCellEditEnding(e);
        }

希望这足够清楚:)

于 2012-05-15T13:12:32.847 回答