我想验证TextBox的输入。我使用IDataErrorInfo接口来做到这一点。当用户输入不正确时,属性ValueIsValid设置为false。但是,我将属性InputValue用于TextInput(它是一个int)。当用户键入“ 1234”时,IDataErrorInfo接口将检查输入是否正确,并在需要时将ValueIsValid设置为false。 但是,当用户键入“ blabla”时,输入未转换为int且未调用IDataErrorInfo接口=> ValueIsValid未设置为false。 当用户在文本框中键入“ blabla”时,如何将ValueIsValid设置为false? 因为我使用MVVM,所以无法从视图模型访问TextBox的validation.hasError属性。
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>