WPF TextBox IValueConverter ConvertBack не запускается при сбое ValidationRules - PullRequest
1 голос
/ 29 января 2020

У меня есть TextBox, который связан с двойной? в моем бэкэнде viewModel. Мне нужно, чтобы ConvertBack срабатывал, когда я очищал TextBox, но validationRule "ValidateNotNullOrWhiteSpace" завершился ошибкой, поэтому в ConvertBack нет вызова. Моя проблема в том, что когда я очищаю textBox, я хочу, чтобы viewModel был нулевым. Прямо сейчас viewModel сохраняет старое значение в качестве примера 10.

Есть ли способ принудительного связывания даже в случае сбоя ValidationRules?

<TextBox x:Name="txtSlabDepth"  Grid.Row="0" Grid.Column="1" Margin="0,3,0,0"
                             TextAlignment="Right" MaxLength="15" 
                             KeyDown="Textbox_KeyDown" TextChanged="Textbox_TextChanged" >
                    <Binding Path="SlabDepth">
                        <Binding.Converter>
                            <converters:LengthInchTextboxConverter x:Name="LengthInchTextboxConverter_SlabDepth"  />
                        </Binding.Converter>
                        <Binding.ValidationRules>
                            <validations:ValidateLength x:Name="ValidateLength_SlabDepth"/>
                            <validations:ValidateNotNullOrWhiteSpace x:Name="ValidateNotNullOrWhiteSpace_SlabDepth"/>
                        </Binding.ValidationRules>
                    </Binding>
                    <TextBox.Style>
                        <Style TargetType="TextBox">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IsSlabDepthModified}" Value="True">
                                    <Setter  Property="Background" Value="Yellow" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>

Спасибо.

1 Ответ

0 голосов
/ 29 января 2020

Вы не должны использовать правила проверки для проверки ваших данных, когда у вас есть класс модели представления, где вы можете реализовать интерфейс INotifyDataErrorInfo или IDataErrorInfo.

В любом случае, вы можете контролировать , когда правило проверки запускается путем установки его свойства ValidationStep.

RawProposedValue является значением по умолчанию. Это означает, что правило проверки запускается до того, как произойдет какое-либо преобразование значения. Если вы хотите, чтобы он запускался после того, как установлено свойство источника модели представления, вам следует установить для свойства ValidationStep значение UpdatedValue:

<validations:ValidateLength x:Name="ValidateLength_SlabDepth" ValidationStep="UpdatedValue" />

См. this сообщение в блоге для получения дополнительной информации.

...