我不确定我是否完全理解 C++ 库的作用以及为什么需要包装它,但如果你在某处有一个基本计量单位,那么使用相对值(汇率)转换为另一个 UOM 是非常简单的
这样做意味着您的模型不需要更改,并且可以为转换后的值公开一个属性,为基值公开一个属性。更改 UOM 会导致转换后的 UOM 值发生变化
例如
class SomeModel
{
// You can assume that the base UOM has a conversion rate of 1
UnitOfMeasure BaseUnitOfMeasure { get; }
decimal BaseQuantity { get; }
UnitOfMeasure UnitOfMeasure { get; set; }
decimal Quantity { get { return UnitOfMeasure.Convert(BaseQuantity, BaseUnitOfMeasure); } }
// or if you are assuming base UOM is conversion rate of 1 then you can just use
// decimal Quantity { get { return UnitOfMeasure.Convert(BaseQuantity); } }
}
那么绑定就变得简单了:
<TextBox Text="{Binding Quantity, Mode=TwoWay}" /><TextBlock Text="{Binding UnitOfMeasure.Name}" />
您的视图无需更改即可显示新的计量单位,您只需为UnitOfMeasure
属性分配一个新的 UOM,然后任何后续调用即可Quantity
返回新的转换汇率。
显然我遗漏了一些通知代码,但你可以填写
这会使事情变得更容易还是您已经考虑过这一点?
我知道您不想用 UOM 字符串“污染”您的模型,但 UOM 确实是模型的一部分。如果不是,它至少是一个 ViewModel 问题,但我不会费心改变你的视图以适应你可以在没有的情况下非常有效地做到这一点