2013-03-26 3 views
0

У меня есть datagrid, который имеет проверку строки с виртуализацией. Я набрал большой файл с 48 столбцами и 500 строками. Он выполняет валидацию для каждой видимой строки (виртуализация) в начале. Поэтому, если 10 строк видны пользователю (у него есть полоса прокрутки), он проверяет только 10 строк при импорте данных, что хорошо.WPF DataGrid RowValidation Issue

Моя проблема: когда я обновляю любую ячейку datagrid, она снова проверяет строку для 10 строк. Я хочу, чтобы сетка данных проверяла только обновленную строку, а не все видимые строки. Из-за этого моя текущая проверка вызывает проблемы с производительностью.

Here Is 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

Попробуйте использовать ValidationStep это UpdatedValue, а не RawProposedValue

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

Я должен использовать RawProposedValue, потому что я тоже хочу для выполнения проверки при импорте данных. И только RawProposedValue делает проверку в то время. как только все будет сделано, а затем я изменил значение ячейки datagrid в то время, только эта строка должна быть обновлена. Но в моем случае он проверяет все видимые строки, даже я обновляю только строку 3. – user2203652