在使用MVVM开发WPF应用程序时,我从未通过viewmodel的公共属性来暴露模型。无论如何,在接触Silverlight和WCF RIA的世界之后,我发现了一种新的实现数据验证的方法,也就是所谓的“Required”属性(还有其他属性)。
这一次,我可以在模型本身内部完成几乎所有的验证逻辑,而不是在viewmodel中创建验证逻辑。
public class TestUserPM {
[Key]
public int ID { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string Email { get; set; }
}
接下来,在ViewModel中,我只需要公开TestUserPM类型的公共属性,并让View直接绑定到该模型即可。
我认为这不是一种优雅的解决方案,但它可以工作,并且没有必要在ViewModel属性内创建繁琐的验证。
这种方法有什么不足之处吗?
更新1
我刚刚发现了一个缺点,也许有解决方法。我想将按钮的命令绑定到ViewModel中的命令,例如,保存按钮绑定到IDataErrorInfo的public string this[string columnName]
中的OnCanExecuteChanged()
,以便仅当所有信息都有效时才能执行此按钮。根据我对WPF MVVM的经验,我会使用帮助类来处理这个问题。
如何处理这种需求?
MyObject.Child.ChildChild.NChild.SomeProperty
。此外,这也违背了模型和视图之间的分离原则,因为如果您在模型中更改属性名称,则必须在视图中进行相应的更改。 - WiiMaxx