Wpf 基于此数据项的其他属性验证单元格值

Wpf 基于此数据项的其他属性验证单元格值,wpf,validation,data-binding,datagrid,cell,Wpf,Validation,Data Binding,Datagrid,Cell,我有一个DataGrid,它有一个DataGridTextColumn,其中包含我希望基于同一行中其他单元格的值进行验证的项。该列绑定到数据项的一个属性。同一数据项的另一个属性包含类似于输入掩码的内容。验证应使用当前行数据项的输入掩码检查新值。该输入掩码不会在表单上的任何位置进行编辑(无需跟踪输入掩码的更改),但每行的输入掩码可能不同。那么如何编写这样的自定义验证器呢?我尝试了以下方法: <DataGridTextColumn Width="*">

我有一个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);
    }
}
类别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属性包含我要查找的实际数据项