2012-03-15 52 views
1

我有一个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

我应该用其他的东西ValidationStep =“RawProposedValue”,那么我会越来越BindingExpression为我的验证方法的值参数,这BindingExpression.DataItem属性包含我正在寻找实际的数据项。

相关问题