根据此数据项的其他其他属性验证单元格值

时间:2012-03-15 16:59:45

标签: wpf validation data-binding datagrid cell

我有一个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绑定表达式。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我应该使用其他的ValidationStep =“RawProposedValue”,然后我将在我的Validate方法中将BindingExpression作为值参数,并且此BindingExpression.DataItem属性包含我正在寻找的实际数据项。