ValidationSummary 验证控件问题

好奇都是要学的 2010-11-01 03:13:26
我在前台放了一个输入框和一个验证控件还有一个 butten按钮 保存用的
<TextBox Name="TBXYear" Grid.Column="1" Grid.Row="0" Margin="4" Text="{Binding Year,Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"/>

<sdk:ValidationSummary Grid.ColumnSpan="4" Target="{Binding ElementName=LayoutRoot}" Grid.Row="14" Name="validationSummary" />

<Button x:Name="btnSave" Content="保存" Width="70" Height="23" Margin="0,0,10,0" Click="btnSave_Click" />

表的映射类里写的, 只能输入4位数字 正则可能不对
[Required]

[RegularExpression("^[a-zA-Z0-9_]*$", ErrorMessage = "年份输入错误!")]
public long? Year
{
get { return _year; }
set
{
this._year = value;
}

}

问题 1: 现在谁能帮我该下正则, 因为我现在输入字符后,提示year类型错误而不提示年份输入错误
2: 我输入的是字符, 但是点保存按钮 还是进行了操作, 我想问的是 当点保存的时候还去判断下我输入的内容是否正确,不正确就停下来.正确在进行保存
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunpire 2010-11-01
  • 打赏
  • 举报
回复
1: 现在谁能帮我该下正则, 因为我现在输入字符后,提示year类型错误而不提示年份输入错误
这个和正则无关,因为类型是 long? 型, 字符转化为 long? 失败,自然抛出类型错误的异常

2:我输入的是字符, 但是点保存按钮 还是进行了操作, 我想问的是 当点保存的时候还去判断下我输入的内容是否正确,不正确就停下来.正确在进行保存
这个应让调用 BindingExpression.UpdateSource();


if( ! validationSummary.HasErrors ){
BindingExpression expression = TBXYear.GetBindingExpression(TextBox.TextProperty);
expression.UpdateSource();
}
// 如果校验失败,则 validationSummary.HasErrors 变为 true
if( ! validationSummary.HasErrors ){
// 继续
}
else{
// 校验失败
}


3. 只能输入4位年份,这个使用[Range]更容易 。并且要调用 Validator.ValidateProperty()

[Range(1900, 2888)]
public long? Year
{
get { return _year; }
set
{
Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Year"});
this._year = value;
}

}
passself 2010-11-01
  • 打赏
  • 举报
回复
停下来用return或者return false 至于正则那楼主找个转换器吧,可以随便转化
  • 打赏
  • 举报
回复
我还想问, 每个映射类都必须有 key 吗?
  • 打赏
  • 举报
回复
为什么没人回答我的? 太低级了?

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧