【问题标题】:Validation Error messages in silverlight MVVMsilverlight MVVM 中的验证错误消息
【发布时间】:2011-06-25 14:45:37
【问题描述】:

我正在尝试实施 Josh Smith 示例中的数据验证技术:Using a viewmodel to provide meaningful validation...

我的代码与示例非常相似,除了一些不同之处,即我使用的是 MVVM-Light 工具包,而我的模型人类是来自 WCF 后端的部分类。

以下是相关代码的示例:

首先是来自 WCF 的类的自动生成版本:

public partial class Person : BaseObject
{
    private string FooField;
    public string Foo {
        get {
                return this.FooField;
            }
        set {
                if ((object.ReferenceEquals(this.FooField, value) != true)) {
                    this.FooField = value;
                    this.RaisePropertyChanged("Foo");
                }
            }
}

然后我扩展部分类来实现 IDataErrorInfo:

public partial class Person : IDataErrorInfo
{

    public string Error
    {
        get { return null;}
    }

    public string this[string propertyName]
    {
        if (propertyName == "Foo")
        {
            //Do some backend Validation
        }
    }
}

最后我有一个视图模型:

public class PersonViewModel : INotifyProperyChanged, IDataErrorInfo
{
    private string _fooString;
    private Person _person;

    ...

    public string Foo {
        get { return _fooString; }
        set 
        {
            if (value == _fooString;)
                return;

            _fooString = value;

            RaisePropertyChanged("Foo");
        }

    public string this[string propertyName]
    {
        if (propertyName == "Foo")
        {
            string msg = Validate(Foo);  //Frontend Validation, range, format, etc.
            if(msg ! = null)
                return msg;

            _person.Foo = Foo;

        }
    }
}

因此,当我绑定到视图模型中的属性时,IDataErrorInfo 的索引器中定义的验证代码会在视图模型和我的文本框上执行,或者如果我的验证失败,则会像预期的那样突出显示任何内容。然而,在我的代码中,模型端的索引器根本不会被执行。老实说,我没有看到或理解应该调用它的机制。我已经运行了 Josh Smith 的示例中的示例代码,它确实有效,调用了 MV 的 this[],然后如果验证通过了模型的 this[] 命中以进行额外的验证,但我这辈子看不到它是如何实现的发生。

我真的希望这是我忽略的简单事情。感谢您的关注。

【问题讨论】:

    标签: silverlight mvvm mvvm-light validation


    【解决方案1】:

    你不见了

    return _person[propertyName];
    

    来自 ViewModel 中的索引器。

    【讨论】:

    • 好吧!太尴尬了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多