Как остановить запуск проверки, чтобы автоматически запускаться в 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
отображал ошибку до тех пор, пока данные не будут вставлены.
Ответы
Ответ 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
, проверка будет работать, как ожидалось.