Wpf 基于此数据项的其他属性验证单元格值
我有一个DataGrid,它有一个DataGridTextColumn,其中包含我希望基于同一行中其他单元格的值进行验证的项。该列绑定到数据项的一个属性。同一数据项的另一个属性包含类似于输入掩码的内容。验证应使用当前行数据项的输入掩码检查新值。该输入掩码不会在表单上的任何位置进行编辑(无需跟踪输入掩码的更改),但每行的输入掩码可能不同。那么如何编写这样的自定义验证器呢?我尝试了以下方法:Wpf 基于此数据项的其他属性验证单元格值,wpf,validation,data-binding,datagrid,cell,Wpf,Validation,Data Binding,Datagrid,Cell,我有一个DataGrid,它有一个DataGridTextColumn,其中包含我希望基于同一行中其他单元格的值进行验证的项。该列绑定到数据项的一个属性。同一数据项的另一个属性包含类似于输入掩码的内容。验证应使用当前行数据项的输入掩码检查新值。该输入掩码不会在表单上的任何位置进行编辑(无需跟踪输入掩码的更改),但每行的输入掩码可能不同。那么如何编写这样的自定义验证器呢?我尝试了以下方法: <DataGridTextColumn Width="*">
<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);
}
}
类别2:验证规则
{
///
///输入掩码
///
公共字符串格式{get;set;}
///应根据输入掩码验证的单元格新值
公共覆盖验证结果验证(对象值,System.Globalization.CultureInfo CultureInfo)
{
//验证逻辑在这里
返回新的ValidationResult(true,null);
}
}
但我似乎无法将Class2.Format属性绑定到数据项,因为Class2不是从DependencyObject继承的。我认为,如果我只是从C#代码手动初始化所有格式值,我可能会解决这个问题,但我认为应该有更好的解决方案使用XAML绑定表达式
有什么想法吗?我应该使用其他ValidationStep=“RawProposedValue”,然后我将在我的Validate方法中获取BindingExpression作为值参数,并且这个BindingExpression.DataItem属性包含我正在寻找的实际数据项。我应该使用其他ValidationStep=“RawProposedValue”,然后,我将在验证方法中获取BindingExpression作为值参数,并且这个BindingExpression.DataItem属性包含我要查找的实际数据项