اضافه کردن امکان ویرایش WPF DataGrid در صورت نامعتبر بودن سلول ها
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

اگر با دیتا گرید‌های 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 است و امکان ویرایش دیتا گرید وجود ندارد که در تکه کد بالا این رفتار تغییر داده شده  است.