假设我有一个简单的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"
。我强调,错误消息必须是自定义的,而不是默认的。谁能提供一些有关如何实现这一目标的见解?
谁能提供一些有关如何实现这一目标的见解?
您可以使用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/