对于模型是必需的,但最初为View的空字段 - MVVM

时间:2016-11-08 22:25:47

标签: c# wpf mvvm

请帮助我:

我的模型具有Enum类型的属性。此属性是必需的,但在View初始值必须为空。将显示水印..

如果我理解正确,那么模型将不具有可空属性。但是viewModel将具有可空性。这是对的吗?

在这种情况下看起来像是:

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

其他方式是:

模型将具有可空属性并需要验证:

  • 可以绑定到模型
  • 模型不符合现实"
  • 我们需要始终从可空的枚举中公开数据并忘记null吗?或处理它(转换为DTO或类似的东西)
  • nullable属性仅是UI要求,将来可以更改

1 个答案:

答案 0 :(得分:0)

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

要求UI允许无效值(初始或其他)将导致以下两项内容之一:

当View发布空值(通过专用的ViewModel)并执行检查以确保其不为空(我假设用户选择"请从选择框中选择"值)服务器将回复一条错误消息,上面写着"请选择一个有效的值,等等等等#34;。 或者,服务器将允许视图模型中的null,并将域模型属性默认为某个预定的合理值。

根据我的经验,这种设置会导致令人沮丧的用户体验,因为让UI呈现无效的选择选项,仅在提交时进行反馈(或使用某些前端/客户端验证)是相当烦人的(特别是在长形式上等等) )。

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

话虽如此,如果你真的希望UI没有有效的初始值,那么制作一个具有可空版本的视图模型,并按照你的建议在服务器上进行验证。至于用可空的方式改变(域)模型,你似乎已经担心它不会对应于现实"考虑到您已经提到过这是一个仅限UI的要求,这是一个很好的冲动,因此将详细信息放在该层中,并使您的域模态尽可能接近现实,以满足您的用例和/或业务需求。