我想在silverlight应用程序中实现两种类型的验证。我希望在viewmodel中实现“业务逻辑”规则(比如结束日期不早于开始日期)我已经完成,并且输入验证在主要的某处控制,输入字段的位置(如日期格式错误)。有什么银光可以“帮助”我吗?我的意思是至少存在UnsetValue,但是有没有相关的事件或我必须捕获所有的OnChanged事件?还有一种方法可以在我想要的时候手动显示控件周围的红色边框吗?
很抱歉,从我的问题来看并不明显,但我完成了包含“业务逻辑”规则的部分 - 我的viewmodel确实实现了INotifyDataErrorInfo,我对第二种类型的验证感到困扰。
答案 0 :(得分:2)
在ViewModel上实施INotifyDataErrorInfo以启用View Model级别的验证。
答案 1 :(得分:0)
在您的属性上实现INotifyDataErrorInfo
然后在您在XAML中绑定的属性上使用友好的显示名称:
private DateTime? _datumP = DateTime.Now;
[Display(Name = "Date", ResourceType = typeof(CommonExpressions))]
public DateTime? DatumP
{
get
{
return _datumP;
}
set
{
if (_datumP != value)
{
_datumP = value;
RaisePropertyChanged(DatumPonudbePropertyName);
}
ValidateDate(DatumPonudbe, DatumPonudbePropertyName);
}
}
然后验证日期的方法:
public void ValidateDate(DateTime? value, string propertyName)
{
RemoveError(propertyName, CommonErrors.DatumNull_ERROR);
if (value == null)
AddError(propertyName, CommonErrors.DatumNull_ERROR, false);
}
现在对于XAML部分:
<sdk:DatePicker Width="100" SelectedDate="{Binding DatumP, Mode=TwoWay,
NotifyOnValidationError=True, ValidatesOnNotifyDataErrors=True,
ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
P.S。
CommonExpressions和CommonErrors是我的多语言资源文件,你可以在这里使用普通字符串。