我的DataGrid for WPF有问题。我想在编辑时获取当前单元格的文本。问题是如果不首先提交单元格,就无法获得值。我想在提交之前先验证文本。
感谢。
答案 0 :(得分:0)
你有不同的方法。
最干净的方法是在模型中实现IDataErrorInfo
并在绑定中设置ValidatesOnDataError=true
。 (如果您不了解IDataErrorInfo
,我真的鼓励您花一些时间来精益求精,因为它是一个非常有用的工具并且非常易于使用)
另一种替代解决方案,需要更少的代码,但可能不那么干净:
您只需将事件处理程序添加到CellEditEnding
(或覆盖DataGrid.OnCellEditEnding
)并验证在提交之前输入的数据。如果验证失败,您只需取消CellEditEnding事件。
如果您覆盖OnCellEditEnding
(这与添加事件处理程序几乎完全相同),这是代码。
我为你举了一个简单的例子,我在这里尝试解析输入的文本。
您可以使用EditingElement
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);
}
希望这很清楚:)