c# - MVVM- 在视图模型中的字段更改时验证模型

c# - MVVM- 在视图模型中的字段更改时验证模型,第1张

我将MVVMLight库与Database-First EF模​​型一起使用。当我的viewmodel中的某个字段发生变化时,我无法弄清楚如何验证模型。当我在设置方法中调用Validate时更新模型的各个属性时,这很好用。我不确定这在其他地方是如何运作的。

为了举例,我的应用程序中有一个Person类(模型),在视图模型中实现了一个名为Name的属性:

private Person _currentPerson; 

// Code omitted...

[Required(ErrorMessage = "Name is a required field.")]
public string Name
{
    get { return _currentPerson.Name; }
    set
    {
        if (value != _currentPerson.Name)
        {
            _currentPerson.Name = value;
            RaisePropertyChanged();
            Validate(_currentPerson.Name);
        }
    }
}

当我想创建一个新人时,我使用此代码将RelayCommand附加到名为NewPerson的方法:

public RelayCommand NewCommand { get { return _newCommand ?? (_newCommand = new RelayCommand(NewPerson)); } }

// Code omitted...

private void NewPerson()
{
    _currentPerson = new Person();
    RaisePropertyChanged(String.Empty); // Updates model and UI.
}

如何在不调用每个属性的_currentPerson的情况下验证Validate?因为这个模型类有很多属性......(30 )。

我唯一尝试过的是使用反射来遍历Person对象的所有属性,但这会导致异常,而我并不理解。

更新 管理得到一些工作,但必须有一个更好的方法来做到这一点:

private void NewPerson()
{
    _currentPerson = new Person();
    RaisePropertyChanged(String.Empty); // Updates model and UI.
    ValidatePerson(_currentPerson);
}

private void ValidatePerson(Person p)
{
    Validate(p.Forename, "Forename");
    Validate(p.Surname, "Surname");
    Validate(p.DateOfBirth, "DateOfBirth");
    // There's about another 30 calls to Validate here...
}

最佳答案:

2 个答案:

答案 0 :(得分:0)

如何在Validate()方法中验证整个person对象,而不仅仅是单个属性?

答案 1 :(得分:0)

如果您希望按属性单独验证逻辑,只需在整个模型需要检查时添加单独的validate all方法。这可以调用您的个人方法或执行更定制的事情。

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复