就我使用 MVVM 开发 WPF 应用程序而言,我从未通过 viewmodel 的公共属性公开模型。不管怎样,在我刚刚进入Silverlight和WCF RIA的世界后,我发现了实现数据验证的新方法,这就是Required属性所说的。 (还有其他属性)
这次,我可以在模型本身内部完成几乎所有验证逻辑,而不是在视图模型内创建验证逻辑。
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 属性内创建繁琐的验证。
这种方法有什么缺点吗?
Update 1
我刚刚发现 1 个缺点,可能有解决方案。我想绑定按钮的命令,例如按钮保存到ViewModel中的命令,但当且仅当所有信息有效时此按钮才能执行。根据我使用 WPF MVVM 的经验,我将其称为辅助类OnCanExecuteChanged()
inside public string this[string columnName]
of IDataErrorInfo
.
我该如何应对这种要求?
我一直通过 ViewModel 公开 Model,只是为了让事情变得简单并且不重复自己 (DRY)。
唯一可以避免在模型中添加属性以适应 UI 的需要(正如本杰明指出的那样),就是将模型保留为 viewModel 的属性,这样您就可以向 viewModel 添加属性,而不会弄乱模型。
即:ViewModel 是 DataContext,它有一个返回模型的 Model 属性
<TextBlock Text={Binding Path=Model.Name} />
<TextBlock Text={Binding Path=Model.Address} />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)