Wpf 用户完成更新后,需要立即执行行和DataGridTemplateColumn验证

Wpf 用户完成更新后,需要立即执行行和DataGridTemplateColumn验证,wpf,validation,wpf-controls,wpfdatagrid,wpf-4.0,Wpf,Validation,Wpf Controls,Wpfdatagrid,Wpf 4.0,我正在使用ValidationRule在我的datagrid中执行验证。我在行和DataGridTemplateColumn上都放置了ValidationRules。当用户与模板化列控件交互时,列验证工作正常,但行上的验证错误将保留,直到用户对任何列排序为止 如果我可以在没有用户交互的情况下验证新行,那么我可能不需要对行和模板列进行验证。由于创建了一个新行,并且所有控件都使用数据模板,因此如果我不使用行验证,则不会对列触发验证,因此为了验证新创建的行,我需要使用如下所述的行验证 //Custom

我正在使用ValidationRule在我的datagrid中执行验证。我在行和DataGridTemplateColumn上都放置了ValidationRules。当用户与模板化列控件交互时,列验证工作正常,但行上的验证错误将保留,直到用户对任何列排序为止

如果我可以在没有用户交互的情况下验证新行,那么我可能不需要对行和模板列进行验证。由于创建了一个新行,并且所有控件都使用数据模板,因此如果我不使用行验证,则不会对列触发验证,因此为了验证新创建的行,我需要使用如下所述的行验证

//CustomValidation class
public class CustomValidation : ValidationRule
{

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {

        MyClass myClassObj = null;

        if ((value as BindingGroup) == null)
        {
            if (value as System.Windows.Data.BindingExpression != null)
            {
                myClassObj = ((System.Windows.Data.BindingExpression)(value)).DataItem as MyClass;
            }
            else
            {
                myClassObj = value as MyClass;
            }
        }
        else
        {
            if ((value as BindingGroup).Items.Count > 0)
            {
                myClassObj = (value as BindingGroup).Items[0] as MyClass;
            }
        }


        //Perform Validation here

        return ValidationResult.ValidResult;

    }
}


//DataGrid Row Validation Rule
<DataGrid.RowValidationRules>
                    <validation:CustomValidation ValidationStep="UpdatedValue" ValidatesOnTargetUpdated="True" />
                </DataGrid.RowValidationRules>


//DataGrid Custom Column
<DataGridTemplateColumn Width="120"  Header="Custom Checkbox" HeaderStyle="{StaticResource StyleColumnHeader}" CellStyle="{StaticResource StyleDataGridCell}">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox HorizontalContentAlignment="Center" Width="20">
                                    <CheckBox.IsChecked>
                                        <Binding Path="CustomCheckboxValue" UpdateSourceTrigger="PropertyChanged"  ValidatesOnDataErrors="True" ValidatesOnExceptions="True" NotifyOnValidationError="True" NotifyOnTargetUpdated="True" NotifyOnSourceUpdated="True">
                                            <Binding.ValidationRules>
                                                <validation:CustomValidation ValidationStep="UpdatedValue" />
                                            </Binding.ValidationRules>
                                        </Binding>
                                    </CheckBox.IsChecked>
                                </CheckBox>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>