gpt4 book ai didi

silverlight - 为什么在 Silverlight MVVM 中通过 ViewModel 暴露 Model 不好?

转载 作者:行者123 更新时间:2023-12-03 10:10:42 26 4
gpt4 key购买 nike

就我使用 MVVM 开发 WPF 应用程序而言,我从不通过 viewmodel 的公共(public)属性公开模型。无论如何,在我刚刚来到 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 类型的公共(public)属性,并让 View 直接绑定(bind)到模型。

我认为这不是优雅的解决方案,但它可以工作,并且不需要在 viewmodel 属性中创建繁琐的验证。

这种方法有什么缺点吗?

更新 1

我刚刚发现了 1 个缺点,可能是它有解决方案。我想绑定(bind)按钮的命令,例如,按钮保存到 ViewModel 中的命令,但是当且仅当所有信息都有效时,此按钮才能执行。根据我使用 WPF MVVM 的经验,我将调用帮助类 OnCanExecuteChanged()里面 public string this[string columnName]IDataErrorInfo .

我该如何处理这种要求?

最佳答案

我一直通过 ViewModel 公开模型,只是为了保持简单并且不重复自己(DRY)。

唯一避免需要在模型中添加属性以适应 UI(如 Benjamin 指出)的方法是将模型保留为 viewModel 的属性,这样您就可以向 viewModel 添加属性,而不会弄乱模型。

即: ViewModel 是 DataContext 并且它有一个返回模型的模型属性

<TextBlock Text={Binding Path=Model.Name} />
<TextBlock Text={Binding Path=Model.Address} />

关于silverlight - 为什么在 Silverlight MVVM 中通过 ViewModel 暴露 Model 不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com