Textbox не устанавливает значение как ноль, когда пользователь очищает текстовое поле в WPF - PullRequest
3 голосов
/ 06 марта 2020

У меня есть следующее текстовое поле:

<TextBox FontSize="10">
    <TextBox.Text>
        <Binding Path="EstatusAdministrativo" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <validations:IsRequiredValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Это текстовое поле привязано к переменной в ViewModel, которая выглядит следующим образом:

private string _EstatusAdministrativo;
public string EstatusAdministrativo {
 get {
  return _EstatusAdministrativo;
 }
 set {
  _EstatusAdministrativo = value;
  OnPropertyChanged();
 }
}

Проверка внутри текстового поля выглядит следующим образом this:

public class IsRequiredValidationRule: ValidationRule {
 public override ValidationResult Validate(object value, CultureInfo cultureInfo) {
  string strValue = Convert.ToString(value);
  if (string.IsNullOrWhiteSpace(strValue))
   return new ValidationResult(false, $ "Por favor llenar este campo.");
  return new ValidationResult(true, null);
 }
}

Когда я удаляю все символы в текстовом поле, значение EstatusAdministrativos не устанавливается как ноль. Это не вызывает метод set, когда я очищаю текстовое поле. Почему это происходит и как я могу это решить?

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

Свойство источника не устанавливается, когда правила проверки не выполняются, если только для свойства ValidationStep не установлено значение UpdatedValue:

<validations:IsRequiredValidationRule ValidationStep="UpdatedValue" />

Это приведет к запуску правила проверки после свойство source было установлено. Вы можете прочитать больше об этом в этом сообщении в блоге.

Если вам нужен больший контроль, вы должны избавиться от правила проверки и реализовать интерфейс INotifyDataErrorInfo в своем Посмотреть модель класса.

1 голос
/ 06 марта 2020

вместо

return new ValidationResult(true, null);

вам следует позвонить

return ValidationResult.ValidResult;
1 голос
/ 06 марта 2020

Возможно, вам потребуется установить ValidatesOnDataErrors = false. Это может помешать текстовому полю обновлять значение свойства, если введенное значение не проверяется.

https://docs.microsoft.com/en-us/dotnet/api/system.windows.data.binding.validatesondataerrors?view=netframework-4.8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...