Я хочу проверить ввод TextBox.Я использовал интерфейс IDataErrorInfo для этого.Если пользовательский ввод неправильный, свойство ValueIsValid имеет значение false.Тем не менее, я использую свойство InputValue для TextInput (его int).Когда пользователь вводит «1234», интерфейс IDataErrorInfo проверяет правильность ввода и при необходимости устанавливает ValueIsValid в значение false.Но когда пользователь вводит «blabla», входные данные не преобразуются в int, а интерфейс IDataErrorInfo не вызывается => ValueIsValid не устанавливается в false.Как установить для ValueIsValid значение false, когда пользователь вводит «blabla» в TextBox?Я не могу получить доступ к свойству validation.hasError TextBox из моей модели представления, потому что я использую MVVM.
ViewModel:
public class ViewModel : IDataErrorInfo
{
public bool ValueIsValid { get; set; }
public string StrErrorMessage
{
get { return "Some Error ..."; }
}
public int InputValue
{
get { return m_inputValue; }
set
{
m_inputValue = value;
NotifyPropertyChanged();
ValueIsValid = true;
}
}
protected int m_inputValue;
public string Error
{
get { return null; }
}
public string this[string columnName]
{
get
{
if (columnName == "InputValue")
{
if (InputValue == 10)
{
ValueIsValid = false;
return "Wrong value in TextBox.";
}
}
return string.Empty;
}
}
}
WPF
<TextBox Text="{Binding InputValue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding StrErrorMessage}"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>