2011-02-11 69 views
1

验证错误消息我试图实现从约什·史密斯的例子在这里进行数据验证技术:Using a viewmodel to provide meaningful validation...在Silverlight MVVM

我的代码是非常相似的例子,除了少数区别,即我使用MVVM-Light工具包,我的模型person类是来自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的的索引定义的验证代码获取视图模型执行,如果我的验证失败,我的文本框或任何被突出显示预期。但是在我的代码中,MODEL方面的索引器根本不会被执行。我可以诚实地说,我没有看到或理解应该调用它的机制。我已经运行距离约什 - 史密斯的例子示例代码和它的工作,称该MV的这个[],那么如果验证通过模型的这个[]命中为额外的验证,但我为我的生活不能看到它发生。

我真的希望这是一件简单的我俯瞰。感谢您的关注。

+0

你可以发布你的XAML吗? – 2011-02-11 15:01:08

回答

1

你缺少

return _person[propertyName]; 
从视图模型的索引

+0

好!那很尴尬! – Brandorf 2011-02-11 15:50:13