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

标签 sql wpf mvvm

我有一个带有“紧急”字段的任务管理程序。有效值为 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/

    相关文章:

    SQL GROUP BY 子查询

    php - 跟踪用户在我的网站上花费的时间

    wpf - 在右键单击MVVM的treeView中选择节点

    wpf DataGrid 更改单元格换行

    mysql - 有没有办法更新表上的字段并影响另一个表上的另一个字段?

    php - 仅当两个条件都满足时才在单个 sql 语句中选择两行

    .net-3.5 - 使用MEF + MVVM照明工具包时组成零件的理想场所?

    c# - WPF应用程序框架IView问题

    wpf - 新的扩展WPFToolkit ColorPicker

    WPF 列表和 ObservableCollections