Silverlight控件的输入验证

时间:2012-03-20 09:58:27

标签: silverlight validation mvvm

我想在silverlight应用程序中实现两种类型的验证。我希望在viewmodel中实现“业务逻辑”规则(比如结束日期不早于开始日期)我已经完成,并且输入验证在主要的某处控制,输入字段的位置(如日期格式错误)。有什么银光可以“帮助”我吗?我的意思是至少存在UnsetValue,但是有没有相关的事件或我必须捕获所有的OnChanged事件?还有一种方法可以在我想要的时候手动显示控件周围的红色边框吗?

很抱歉,从我的问题来看并不明显,但我完成了包含“业务逻辑”规则的部分 - 我的viewmodel确实实现了INotifyDataErrorInfo,我对第二种类型的验证感到困扰。

2 个答案:

答案 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是我的多语言资源文件,你可以在这里使用普通字符串。