【问题标题】:Required for model but initially empty field for View - MVVM模型需要,但视图最初为空字段 - MVVM
【发布时间】:2016-11-08 22:25:46
【问题描述】:

请帮帮我:

我有一个具有枚举类型属性的模型。此属性是必需的,但在 View 上初始值必须为空。会显示水印..

如果我理解正确,模型将没有可为空的属性。但是 viewModel 将具有可空性。这是正确的方法吗?

在这种情况下看起来像:

  • 需要创建视图模型
  • viewModel 和模型有时会有不同的数据
  • viewModel 需要逻辑来设置和获取模型的正确值或第一次获取 null 并保持模型不变
  • viewModel 还需要一个验证规则

其他方法是:

模型将具有可为空的属性和必需的验证:

  • 可以绑定模型
  • 模型不“符合现实”
  • 我们总是需要从可为空的枚举中公开数据而忘记了空值?或处理它(转换为 DTO 或类似的东西)
  • 可为空的属性只是 UI 要求,以后可以更改

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    让(域)模型使用不可为空的枚举表明该值必须具有用于用例和/或数据完整性的有效值。

    在 UI 上要求允许无效值(初始值或其他值)将导致以下两种情况之一:

    当视图发布空值(通过专用 ViewModel)并执行检查以确保其不为空(我假设用户从选择框中选择“请选择”值)时,服务器将响应错误消息说“请选择一个有效的值等等等等”。 或者,服务器将允许来自视图模型的 null 并将域模型属性默认为某个预先确定的合理值。

    根据我的经验,这种设置会导致令人沮丧的用户体验,因为让 UI 显示一个无效的选择选项,该选项仅在提交时反馈(或使用某些前端/客户端验证)相当烦人(尤其是在长表单等情况下) )。

    也许您最好重新考虑该要求,以便 UI 仅显示有效的枚举值以供选择,并可选择将默认值设为合理值。

    话虽如此,如果您真的希望 UI 没有有效的初始值,那么请创建一个具有可为空版本的视图模型,并按照您的建议在服务器上进行验证。至于用可空值更改(域)模型,您似乎已经担心它不“符合现实”,考虑到您已经提到这是一个仅 UI 的要求,这是一个很好的冲动,因此将细节放在其中分层并使您的域模式尽可能接近现实,以满足您的用例和/或业务需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-14
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2015-07-05
      • 2010-10-25
      • 1970-01-01
      相关资源
      最近更新 更多