Как остановить запуск проверки, чтобы автоматически запускаться в wpf - программирование

Как остановить запуск проверки, чтобы автоматически запускаться в wpf

У меня есть проверка данных в ViewModel. Когда я загружаю View, проверка проверяется без изменения содержимого TextBox, то есть при загрузке представления стили ошибок устанавливаются на TextBox

Вот код:

XAML

<TextBox {...} Text="{Binding Path=ProductName,
               UpdateSourceTrigger=PropertyChanged, 
               ValidatesOnDataErrors=True}"/>

В ViewModel проверки выполняются с аннотациями данных:

Code

private string _productName;

[Required(AllowEmptyStrings = false, ErrorMessage = "The Product Name can't be null or empty.")]
[StringLength(50, ErrorMessage = "The Product Name can't be longer than 50.")]
[Uniqueness(Entities.Product, ErrorMessage = "A Product with that Name already exists ")]
public string ProductName
{
    get { return _productName; }
    set
    {
        _productName = value;
        SaveProduct.OnCanExecuteChanged();
        OnPropertyChanged("ProductName");
    }
}

Как я могу остановить запуск проверки при загрузке представления?

Я не хочу, чтобы TextBox отображал ошибку до тех пор, пока данные не будут вставлены.

4b9b3361

Ответ 1

Проверки будут проверяться всякий раз, когда событие PropertyChanged получает значение для свойства.

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

_productName = "TestName";

Ответ 2

Даже у меня была та же проблема. Исправлено, используя простой трюк. Я определил private boolean

private bool _firstLoad;

В конструкторе я установил _firstLoad в значение true. Во время проверки данных я возвращаю String.Empty, если значение _firstLoad истинно. При настройке Property ProductName

public string ProductName
  {
    get { return _productName; }
    set
      {
        _productName = value;
        _firstLoad = false;
        SaveProduct.OnCanExecuteChanged();
        OnPropertyChanged("ProductName");
      }
 }

Я установил _firstLoad в значение false. Итак, теперь, когда проверка активируется событием PropertyChanged, проверка будет работать, как ожидалось.