c# - 模型需要,但 View 最初为空字段 - MVVM

标签 c# wpf mvvm

请在这件事上给予我帮助:

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

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

在这种情况下看起来像:

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

  • 另一种方式是:

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

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

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

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

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

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

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

    关于c# - 模型需要,但 View 最初为空字段 - MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40497496/

    相关文章:

    wpf - 取决于 DataContext 的条件框架元素

    wpf - 文本框和默认按钮绑定(bind)更新得太晚了

    c# - 可以创建自定义 ASP.NET(不是 MVC)指令吗?

    c# - 替换方法的 MethodBody 中的指令

    c# - 为什么 DisplayMemberPath 在 WPF ComboBox 的样式中不起作用?

    c# - 带有 TextBlock 的 BulletDecorator 不显示 Unicode 字符

    wpf - DataTemplate、LoadContent 和 DataTriggers 未触发

    c# - VisualBrush WPF 显示

    C# - 实现具有两个公共(public)接口(interface)的私有(private)类,然后转换为它们两个?馊主意?

    c# - ObservableCollection 和 INotifyPropertyChanged 的​​ WPF MVVM 问题