使用 MVVM light 进行 Windows Phone 7 文本框验证

发布于 2024-12-05 21:23:39 字数 591 浏览 0 评论 0原文

对于 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

What is the best way to do this for a WP7 7.0 app (SL3). Should I use visual states? IS there a way to use attributes from the model sort of like the Silverlight examples would do ? Any good examples with MVVM+WP7?

So far all I can find is these two examples.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

知足的幸福 2024-12-12 21:23:39

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

ValidationModelBase 的属性:
是否有效
显示错误

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

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 指令中处理它。

如果您愿意,我可以写更多有关我的方法的内容。

For every view you should to make files named Validated(ViewName).cs. Everyone should inherit from ValidatedModelBase implemented interfaces INotifyPropertyChanged, INotifiDataError.

Properties of ValidationModelBase:
IsValid
ShowErrors

Methods:
T ToModel - convert all ValidatedModel fields to ViewModel
void Validate:

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) - it will be implemented in ValidatedModels, where You give property name to validate as parameters and handle it in simple switch/case instruction.

I can write more about my method, if You want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文