Продолжайте добавлять или редактировать строку datagrid, даже если строка имеет правило проверки ошибок
Я хочу, чтобы datagrid продолжал добавлять или редактировать строку DataGrid, даже если строка имеет правило проверки ошибок
это образец для того, чтобы прояснить идею
<DataGrid Name="Dgrid" AutoGenerateColumns="False" ItemsSource="{Binding Request.Obligations}" CanUserAddRows="True"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Id}" /> <DataGridTextColumn Binding="{Binding Name}"/> <DataGridTextColumn Binding="{Binding Age}"/> </DataGrid.Columns> <DataGrid.RowValidationRules> <validationRules:ٌRowValidationRule ValidatesOnTargetUpdated="True" ValidationStep="UpdatedValue" /> </DataGrid.RowValidationRules> <DataGrid.RowValidationErrorTemplate> <ControlTemplate> <!--<Grid Margin="0,-2,0,-2" ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}},Path=(Validation.Errors)[0].ErrorContent}">--> <Grid Margin="0,-2,0,-2"> <Grid.ToolTip> <MultiBinding Converter="{StaticResource DataGridRowMultiConverter}"> <Binding Path="(Validation.Errors)[0].ErrorContent" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}" /> <Binding Path="DataContext" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Window}" /> </MultiBinding> </Grid.ToolTip> <Ellipse StrokeThickness="0" Fill="Red" Width="{TemplateBinding FontSize}" Height="{TemplateBinding FontSize}" /> <TextBlock Text="!" FontSize="{TemplateBinding FontSize}" FontWeight="Bold" Foreground="White" HorizontalAlignment="Center" /> </Grid> </ControlTemplate> </DataGrid.RowValidationErrorTemplate> </DataGrid>
Если пользователь ввел новую строку с недопустимыми данными, он не сможет добавить новую строку, и новая строка будет отсутствовать, а существующие данные не могут быть отредактированы.
Короче говоря, я хочу остановить поведение RowValidationRules и сделать его jop, чтобы сообщить пользователю, что он ввел недопустимые данные, не останавливая его.
После поиска я нашел этот код:
protected override void OnCanExecuteBeginEdit(System.Windows.Input.CanExecuteRoutedEventArgs e) { var hasCellValidationError = false; var hasRowValidationError = false; const BindingFlags bindingFlags = BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance; var cellError = this.GetType().BaseType.GetProperty("HasCellValidationError", bindingFlags); var rowError = this.GetType().BaseType.GetProperty("HasRowValidationError", bindingFlags); if (cellError != null) hasCellValidationError = (bool)cellError.GetValue(this, null); if (rowError != null) hasRowValidationError = (bool)rowError.GetValue(this, null); base.OnCanExecuteBeginEdit(e); if ((!e.CanExecute && hasCellValidationError) || (!e.CanExecute && hasRowValidationError)) { e.CanExecute = true; e.Handled = true; } }
но я обнаружил, что могу редактировать строки, но не могу добавлять больше строк
Что я уже пробовал:
продолжайте добавлять или редактировать строку DataGrid, даже если строка имеет правило проверки ошибок