2013-03-26 186 views
0

我有DataGrid,它具有虚拟化上的行验证。我用48列和500行给大文件。它在开始时为每个可见行(虚拟化)进行验证。所以如果用户可以看到10行(它有滚动条),那么当数据导入时它只验证10行,这很好。WPF DataGrid RowValidation问题

我的问题是:当我更新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; 
    } 
} 

回答

0

尝试使用ValidationStepUpdatedValue而非RawProposedValue

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

我必须使用RawProposedValue,因为我也想在导入数据时执行验证。只有RawProposedValue在那个时候进行验证。一旦每件事完成,然后我改变了datagrid单元格的值,那么只需要更新该行。但在我的情况下,它会检查所有可见的行,即使我只更新第3行。 – user2203652 2013-03-26 14:47:14