gpt4 book ai didi

sql - 如何在 C#/WPF/MVVM 应用程序中处理 ViewModel 和数据库

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

我有一个带有“紧急”字段的任务管理程序。有效值为 Int16,当前映射为 1(高)、2(中)、3(低)、4(无)和 99(关闭)。紧急度字段用于对任务进行排名以及更改列表和详细 View 中项目的外观。

当用户正在编辑或添加新任务时,他们会在 ComboBox 中选择或查看紧迫性。转换器传递字符串以替换 Ints。紧急集合非常简单,我没有将其设为数据库中的表,而是由方法填充的 ObservableCollection(Int16)。

由于可以使用同一屏幕查看已关闭的任务,因此“已关闭”的紧迫性必须在 ItemsSource 中,但我不希望用户能够选择它。为了防止用户能够在 ComboBox 中选择该项目,但如果数据库中的项目具有该值,我仍然能够看到它,我应该...

  • 在代码或 Xaml 中手动禁用 ComboBox 中的项目(我对此表示怀疑)
  • 将 Urgency 集合从 Int16 更改为具有 Selectable 属性的 Object,ComboBoxItem 的 isEnabled 属性绑定(bind)到该属性。
  • 执行 2,但也将紧急信息分隔到数据库中自己的表中,并在 Tasks 表中使用外键
  • 以上都不是(我怀疑这是正确答案)

  • 我问这个是因为这是一个学习项目(我的第一个真正的 WPF 和第一个 MVVM 项目)。我知道很少有做某事的正确方法,但我想确保我以合理的方式学习,因为要改掉坏习惯要困难得多

    谢谢

    麦克风

    最佳答案

    我更喜欢选项 2。对我来说听起来很 MVVM 风格。

    当有其他应用程序或当您有报告访问“紧急”字段时,选项 3 将是有利的。原因:否则需要重复Int16及其含义之间的映射知识。将知识移动到数据库中以将其保存在一个位置。

    也许考虑 Enums 使代码更具表现力:

    enum Urgency { High=1, Medium=2, Low=3, Closed=99 };

    这样,您将有一些很好的东西来评估 IsEnabled 属性,如下所示:
    if (urgency == Urgency.Closed) return false;

    当您需要存储枚举的数值时,您需要预先转换为 Int16。

    关于sql - 如何在 C#/WPF/MVVM 应用程序中处理 ViewModel 和数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497486/

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