让我们说我有一个简单的WPF,其文本框以两种方式绑定到整数属性。这是XAML:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TextBox Text="{Binding Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
MVVM模型:
public class MyModelView : ViewModelBase
{
public int Number
{
get
{
return _number;
}
set
{
_number = value;
RaisePropertyChanged();
}
}
private int _number;
}
现在,如果我输入TextBox
非整数的内容,例如"ABC"
,则TextBox
边框会变为红色,这表示"ABC"
无法转换为int
。
我想要的是将鼠标悬停在邮件上,或ToolTip
上的TextBox
上显示自定义错误消息,例如"ABC cannot be converted to integer, please put a valid integer number"
。我强调,错误消息必须是自定义的,而不是默认的。
任何人都可以提供一些有关如何实现这一目标的见解吗?
答案 0 :(得分:2)
任何人都可以提供一些有关如何实现这一目标的见解吗?
您可以使用ValidationRule
:
public class StringToIntValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
int i;
if (int.TryParse(value.ToString(), out i))
return new ValidationResult(true, null);
return new ValidationResult(false, "Please enter a valid integer value.");
}
}
<强> XAML:强>
<TextBox>
<TextBox.Text>
<Binding Path="Number" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:StringToIntValidationRule ValidationStep="RawProposedValue"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
有关此内容的更多信息,请参阅以下博客文章。
WPF中的数据验证: https://blog.magnusmontin.net/2013/08/26/data-validation-in-wpf/