.net 绑定到数量和测量单位

.net 绑定到数量和测量单位,.net,wpf,data-binding,.net,Wpf,Data Binding,我是WPF开发的新手,我正在寻找关于我的应用程序中的重复数据绑定模式的建议 在我使用的数据库中,大量使用度量单位和相关值 为了便于演示,这里有一些简化的表格结构,可以为我的工作提供一些线索: 可取样 (……) 数量 测量突尼斯 (……) 样本表2 (……) 速度 距离测量膜 时间测量 (……) 样本表3 (……) 距离 测量突尼斯 (……) 样本表(等) (……) 重量 重量测量 卷 体积测量单位 (……) 测量 身份证 度量类型ID 短名 转换因子 (……) 测量类型 身

我是WPF开发的新手,我正在寻找关于我的应用程序中的重复数据绑定模式的建议

在我使用的数据库中,大量使用度量单位和相关值

为了便于演示,这里有一些简化的表格结构,可以为我的工作提供一些线索:

可取样
  • (……)
  • 数量
  • 测量突尼斯
  • (……)
样本表2
  • (……)
  • 速度
  • 距离测量膜
  • 时间测量
  • (……)
样本表3
  • (……)
  • 距离
  • 测量突尼斯
  • (……)
样本表(等)
  • (……)
  • 重量
  • 重量测量
  • 体积测量单位
  • (……)
测量
  • 身份证
  • 度量类型ID
  • 短名
  • 转换因子
  • (……)
测量类型
  • 身份证
  • 短名
  • (……)
我希望这些名字能说明一切

按照系统的工作方式,存储的值必须全部采用默认的系统单位。在UI中写入10米的用户不会将该值存储为10,它将在之前转换为系统值。例如,对于距离值,如果距离单位类型的默认测量单位为厘米,则存储的值实际上将为1000,因为1000厘米=10米

但是,用户使用的测量单位仍存储在数据库中。这是为了确保下次他再次在UI中打开记录时,他实际上看到的是10米,而不是1000厘米。当然,对话也必须在那里进行

每单位测量类型有一个系统单位。它的转换因子设置为1。其他测量单位有一个与之相关的换算系数。取回高于上面的距离示例:

  • 厘米:1
  • M:100
  • 公里:10万
  • (等等)
在UI中,我想使用一个文本框来写数字,并根据上下文使用一个组合框来加载根据单位类型过滤的度量单位。当用户加载数据时,数据必须显示为输入的数据(根据相关测量单位转换)。当他输入值时,绑定机制必须根据当前选择的度量单位的转换因子将正确的转换值写回实体类

当他选择测量单位时,根据他的个人设置,可能会发生两件事:

  • 显示的号码会更改,存储的号码保持不变
  • 显示的号码保持不变,存储的号码将被转换
现在我的问题是。。。为了便于重用,我可以封装多少功能?最好的方法是什么

请注意,有时我可能需要单独显示这些字段。例如,在网格中,我希望数值部分和单位部分都有一列。这是为了允许仅在设备上进行过滤和排序

我不介意每次都要重新创建单元列表/组合/任何控件。我主要感兴趣的是重用单元转换部分


感谢您阅读到目前为止的文章(哇!),以及您能想到的任何想法。:)

如果您是WPF新手,您应该做的第一件事就是研究该模式


如果您以这种方式构建应用程序,您可以创建一个通用的ViewModel类型,用于所有单元列表/组合/任何控件,它封装了进行单元转换的逻辑。

我确实研究了MVVM,但我可能还有很多要学的。我的问题更多的是关于WPF数据绑定的细节。还是我搞错了,MVVM真的应该填补这个漏洞?VM是处理所有逻辑(例如单位转换、选择单位列表等)的地方,它基本上只是将相关数据呈现给要进行数据绑定的视图。因此,文本部分将只绑定到一个数值属性(可能使用转换器将字符串转换为数值),指定的单位将绑定到另一个属性,可用单位列表(即组合的ItemsSource)将绑定到第三个属性。好的,但有时我还必须显示系统值。这在储存计量单位时很常见,人们希望看到许多盒子和许多产品。我希望对这些字段中的任何一个进行任何更改以使另一个字段做出反应,并且我需要对许多ModelView对象经常重复此模式。然后您可以将系统值作为另一个属性公开。通过将逻辑包含在ViewModel中,然后引发任何修改属性的属性更改事件,可以使它们导致其他属性的更改。并且,通过将此作为视图模型派生的基类,可以使模式可重复。