【发布时间】:2015-03-24 09:15:52
【问题描述】:
我正在使用 MVVM 方法编写 WPF 应用程序,并且我正在使用 IDataErrorInfo 和 DataAnnotations 来验证输入数据。就像这样:
视图模型
/// <summary>
/// User
/// </summary>
[Required(ErrorMessage = "not blank")]
[StringLength(20, MinimumLength = 6, ErrorMessage = "between 6 and 20")]
public string UserID
{
get
{
return _adminInfoModel.UserID;
}
set
{
if (_adminInfoModel.UserID != value)
{
_adminInfoModel.UserID = value;
OnPropertyChanged("UserID");
}
}
}
/// <summary>
/// Name
/// </summary>
[Required(ErrorMessage = "not blank")]
[StringLength(100, ErrorMessage = "less than 100 character")]
public string Name
{
get
{
return _adminInfoModel.Name;
}
set
{
if (_adminInfoModel.Name != value)
{
_adminInfoModel.Name = value;
OnPropertyChanged("Name");
}
}
}
//many properties here....
//implement the IDataErrorInfo interface
public string this[string columnName]
{
get
{
ValidationContext vc = new ValidationContext(this, null, null);
vc.MemberName = columnName;
List<ValidationResult> results = new List<ValidationResult>();
bool result = Validator.TryValidateProperty(this.GetType().GetProperty(columnName).GetValue(this, null), vc, results);
if (results.Count > 0)
{
return results[0].ErrorMessage;
}
return string.Empty;
}
}
查看:
<TextBox Name="UserIDTB" Text="{Binding UserID, UpdateSourceTrigger=LostFocus, Mode=TwoWay, ValidatesOnDataErrors=True}" />
<TextBox Name="NameTB" Text="{Binding Name, ValidatesOnDataErrors=True}" />
问题是:
当我打开这个视图时,由于 ViewModel 实现了 IDataErrorInfo 接口,应用程序将立即验证属性。某些属性使用RequiredAttribute 验证。所以应用程序会在立即打开窗口时指出空白错误。像这样:
应用程序如何在一次打开窗口时跳过验证属性?另一种方式,应用程序如何在单击提交按钮时验证RequiredAttribute?
非常感谢!!
【问题讨论】:
-
@我会知道,但怎么知道?
标签: c# wpf validation mvvm