为什么在Silverlight MVVM中通过ViewModel公开Model是不好的?

Ano*_*ous 8 silverlight mvvm

至于我用MVVM开发WPF应用程序,我从不通过viewmodel的公共属性公开模型.无论如何,在我刚刚来到Silverlight和WCF RIA的世界之后,我找到了实现数据验证的新方法,这就是必需属性所说的.(还有其他属性)

这次不是在viewmodel中创建验证逻辑,而是在模型本身内部几乎可以做验证逻辑.

public class TestUserPM {
    [Key]
    public int ID { get; set; }

    [Required]
    public string FirstName { get; set; }

    [Required]
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

之后,我在ViewModel中需要的只是公开TestUserPM类型的公共属性,并让View绑定到模型.

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

这种方法有任何缺点吗?

更新1

我刚刚找到了1个下方,可能是它有解决方案.我想绑定Button的Command,例如,按钮保存到ViewModel中的Command,但是当且仅当所有信息都有效时,此按钮才能执行.从我与WPF MVVM我已经助手类,我会打电话的经历OnCanExecuteChanged()里面public string this[string columnName]IDataErrorInfo.

我该如何处理这种要求?

Edu*_*eni 10

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

唯一要避免在模型中添加属性以适应UI的方法(如Benjamin所说)是将模型保持为viewModel的属性,因此您可以向viewModel添加属性,而不会弄乱模型.

ie:ViewModel是DataContext,它有一个返回模型的Model属性

<TextBlock Text={Binding Path=Model.Name} />
<TextBlock Text={Binding Path=Model.Address} />
Run Code Online (Sandbox Code Playgroud)

  • 我也一样.ViewModel用于公开和调整模型到视图. (2认同)

Ben*_*ann 5

我看到的主要问题是您的模型(可能是业务对象)必须适应UI.它可能会影响很多其他UI或业务层.

您可以想象在同一对象上具有不同验证级别的多个UI.您的示例无法做到这一点.