使用MVVM灯的Windows Phone 7文本框验证

时间:2011-09-20 22:22:38

标签: validation windows-phone-7 mvvm-light

为WP7 7.0应用程序(SL3)执行此操作的最佳方法是什么。我应该使用视觉状态吗?有没有办法使用类似于Silverlight示例的模型类型的属性? MVVM + WP7有什么好的例子吗?

到目前为止,我只能找到这两个例子。

http://babaandthepigman.wordpress.com/2010/10/21/simple-textbox-validation-wp7/ http://www.windowsphonegeek.com/articles/Building-WP7-Custom-Validation-Control---Architecture-amp-Basic-Prototype

1 个答案:

答案 0 :(得分:0)

对于每个视图,您应该创建名为Validated(ViewName).cs的文件。每个人都应该继承ValidatedModelBase实现的接口INotifyPropertyChanged,INotifiDataError。

ValidationModelBase的属性: 已验证 ShowErrors

方法: T ToModel - 将所有ValidatedModel字段转换为ViewModel void验证:

public void Validate()
    {
        var fields = new List<string>();
        var type = this.GetType();
        var baseType = typeof(ValidatedModelBase<T>);

        while (type != baseType)
        {
            fields.AddRange(type.GetFields()
                .Where(field => field.FieldType == typeof(String) && field.Name.EndsWith("PropertyName"))
                .Select(field => field.GetValue(this) as String));

            type = type.BaseType;
        }

        foreach (var field in fields)
        {
            this.SetErrors(field, this.Validate(field), false);
        }

        this.RefreshIsValid();
    }

virtual IList Validate(string propertyName) - 它将在ValidatedModels中实现,您可以在其中将属性名称作为参数进行验证,并在简单的switch / case指令中处理它。

如果你愿意,我可以写更多关于我的方法。