اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
اگر با دیتا گریدهای WPF کار کرده باشید، به این مساله برخورد کرده اید که وقتی روی یک سلول از دیتا گرید Validaion اعمال شده باشد و آن سلول مقدار نامعتبر داشته باشد،امکان ویرایش سایر ردیفها و سلولها وجود ندارد.در بعضی مواقع نیاز است که این رفتار دیتا گرید غیر فعال شود.یکی از راه هایی که میتوان این کار را انجام داد Override کردن متد OnCanExecuteBeginEdit مربوط به دیتا گرید و تغییر مقدار CanExecute در صورت Invalid بودن سلولها است.
protected override void OnCanExecuteBeginEdit(System.Windows.Input.CanExecuteRoutedEventArgs e) { var hasCellValidationError = false; var hasRowValidationError = false; const BindingFlags bindingFlags = BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance; //Current cell var cellErrorInfo = this.GetType().BaseType.GetProperty("HasCellValidationError", bindingFlags); //Grid row var rowErrorInfo = this.GetType().BaseType.GetProperty("HasRowValidationError", bindingFlags); if (cellErrorInfo != null) hasCellValidationError = (bool) cellErrorInfo.GetValue(this, null); if (rowErrorInfo != null) hasRowValidationError = (bool) rowErrorInfo.GetValue(this, null); base.OnCanExecuteBeginEdit(e); if ((!e.CanExecute && hasCellValidationError) || (!e.CanExecute && hasRowValidationError)) { e.CanExecute = true; e.Handled = true; } }
درحالت پیش فرض هنگامی که CellValidationError یا RowValidationError وجود داشته باشد CanExecute برابر False است و امکان ویرایش دیتا گرید وجود ندارد که در تکه کد بالا این رفتار تغییر داده شده است.