moh_mou Ответов: 1

Продолжайте добавлять или редактировать строку 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, даже если строка имеет правило проверки ошибок

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Продолжайте добавлять или редактировать строку datagrid, даже если строка имеет правило проверки ошибок

Зачем вам нужны правила проверки, если вы не хотите их соблюдать ?

Самое простое решение - это не правило проверки.


moh_mou

Короче говоря. Чтобы использовать RowValidationErrorTemplate, чтобы сообщить пользователю, что он ввел недопустимые данные, не останавливая его, и выделить строку или ячейку