【发布时间】:2013-08-01 02:20:38
【问题描述】:
我是 WPF 开发的新手,我正在寻找有关我的应用程序中的循环数据绑定模式的建议。
在我正在使用的数据库中,大量使用了测量单位和相关值。
为了演示,这里有一些精简的表结构,可能会为我必须处理的内容提供一些线索:
样本表
- (...)
- 数量
- MeasurementUnitId
- (...)
SampleTable2
- (...)
- 速度
- DistanceMeasurementUnitId
- TimeMeasurementUnitId
- (...)
SampleTable3
- (...)
- 距离
- MeasurementUnitId
- (...)
SampleTableN(等...)
- (...)
- 重量
- WeightMeasurementUnitId
- 音量
- VolumeMeasurementUnitId
- (...)
测量单位
- 身份证
- MeasurementUnitTypeId
- 短名称
- 转化系数
- (...)
MeasurementUnitTypes
- 身份证
- 短名称
- (...)
我希望这些名字不言自明。 :)
根据系统的工作方式,存储的值必须全部采用默认系统单位。用户在 UI 中写入 10 米不会将值存储为 10,它会转换为之前的系统值。例如,对于距离值,如果距离单位类型的默认测量单位是厘米,则存储的值实际上是 1000,因为 1000 厘米 = 10 米。
但是,用户使用的测量单位仍存储在数据库中。这是为了确保下次他再次在 UI 中打开记录时,他实际上看到的是 10 米,而不是 1000 厘米。当然也必须在那里进行转换。
每个单位测量类型有一个系统单位。它是将 ConversionFactor 设置为 1 的那个。其他测量单位有一个与此相关的 ConversionFactor。收回上面的距离示例:
- 厘米:1
- 男:100
- 公里:100 000
- (等)
在 UI 中,我想使用一个文本框来编写数字,并使用一个组合框来加载根据上下文过滤的单位类型的测量单位。当用户加载数据时,它必须显示为输入(根据相关的测量单位转换)。当他键入值时,绑定机制必须根据当前选择的度量单位的 ConversionFactor 将正确的转换后的值写回实体类中。
当他选择测量单位时,根据他的个人设置,可能会发生两种情况:
- 显示的号码发生变化,而存储的号码保持不变
- 显示的号码保持不变,存储的号码被转换
现在我的问题是……我可以封装多少这种功能以便于重用?最好的方法是什么?
请注意,有时我可能需要单独显示这些字段。例如,在网格中,我想要一个用于数字部分和单位部分的列。这是为了允许单独对单元进行过滤和排序。
我不介意每次都必须重新创建单元列表/组合/任何控件。我主要对重用单位转换部分感兴趣。
感谢您阅读本文(哇!)以及您能想到的任何想法。 :)
【问题讨论】:
标签: .net wpf data-binding