WPF DataGrid RowValidation问题

时间:2013-03-26 12:57:44

标签: c# wpf validation row

我有datagrid,它具有虚拟化的行验证功能。我用48列和500行表示大文件。它在开始时对每个可见行(虚拟化)进行验证。因此,如果用户可以看到10行(它有滚动条),则在导入数据时它只验证10行,这很好。

我的问题是:当我更新datagrid的任何单元格时,它会再次对10行进行行验证。我希望数据网格只验证更新的行,而不是所有可见的行。我当前的验证会导致性能问题。

这是Xaml:

               <wpfc4:RhinoDataGrid.RowValidationRules>
                    <wpfc4:CourseValidationRule  ValidationStep="RawProposedValue"/>
                </wpfc4:RhinoDataGrid.RowValidationRules>

代码是:

 public class CourseValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value,
        System.Globalization.CultureInfo cultureInfo)
    {
        ValidationResult vResult = ValidationResult.ValidResult;
        DataRowView drView = (value as BindingGroup).Items[0] as DataRowView;
        RhinoDataGrid rGrid = VisualTreeHelpers.FindVisualChild<RhinoDataGrid>(Application.Current.MainWindow);
        for (int i = 0; i < drView.Row.ItemArray.Count(); i++)
        {
            string strVal = drView.Row.ItemArray[i].ToString();
            if (strVal.Length > 10)
            {
                vResult = new ValidationResult(false,
                "error.");
                break;
            }
        }
        return vResult;
    }
}

1 个答案:

答案 0 :(得分:0)

尝试使用ValidationStep UpdatedValue而不是RawProposedValue

<wpfc4:RhinoDataGrid.RowValidationRules>
    <wpfc4:CourseValidationRule  ValidationStep="UpdatedValue"/>
</wpfc4:RhinoDataGrid.RowValidationRules>