2013-03-26 112 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