我有一个DataGrid,它有一个DataGridTextColumn,它包含我想根据同一行中其他单元格值验证的项目。该列绑定到数据项的属性之一。同一数据项的另一个属性包含类似输入掩码的内容。验证应使用当前行数据项的输入掩码检查新值。该输入掩码不在表单上的任何位置进行编辑(无需跟踪输入掩码更改),但每行的输入掩码可以不同。那么我该如何编写这样的自定义验证器呢?我尝试了以下内容:
<DataGridTextColumn Width="*">
<DataGridTextColumn.Binding>
<Binding Path="Name" Mode="TwoWay" UpdateSourceTrigger="LostFocus" ValidatesOnExceptions="True" NotifyOnValidationError="True" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<validation:Class2 ValidatesOnTargetUpdated="True" Format="999" />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
这里有验证码:
class Class2 : ValidationRule
{
/// <summary>
/// input mask
/// </summary>
public string Format { get; set; }
/// <param name="value">cell's new value that should be validated against input mask</param>
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
// validation logic goes here
return new ValidationResult(true, null);
}
}
但似乎我无法将Class2.Format属性绑定到数据项,因为Class2不从DependencyObject继承。我认为如果我只是从C#代码手动初始化所有Format值,我可以解决这个问题,但我认为应该有更好的解决方案使用XAML绑定表达式。
有什么想法吗?
答案 0 :(得分:1)
我应该使用其他的ValidationStep =“RawProposedValue”,然后我将在我的Validate方法中将BindingExpression作为值参数,并且此BindingExpression.DataItem属性包含我正在寻找的实际数据项。