gpt4 book ai didi

c# - 是否有一种干净的方法来处理 WPF 应用程序中的单位(度数、弧度等)转换

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:53 25 4
gpt4 key购买 nike

我正在开发一个 map 应用程序的插件,它有很多类,有大量的单位选项。我觉得我在维护模型内的顺序方面有很好的处理能力。例如,Angle 类具有 Degrees 和 Radians 的属性并自动相互更新。 Altitude 类对英尺 MSL、米 MSL、米 HAE 等执行相同的操作。

但是,当我进入 WPF 端时,我希望任何数据输入点都有一个 TextBox,以便它们可以输入值但也可以显示单位。我目前正在使用 Caliburn Micro 来使用组合,它对我来说完全改变了游戏规则。在过去,我会把某种枚举组合在一起并将它们映射到每个单独的 View 模型,这可能会导致大量代码重复,并且肯定会使代码变得脆弱。我不想在模型中使用某种 SelectedUnit 功能,因为我觉得单位的字符串表示仅对 View 有值(value)。

有什么想法可以实现值与其单位之间的清晰映射,从而允许组合?

最佳答案

我不确定我是否完全理解 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); } }
}

那么绑定(bind)就变得简单了:

<TextBox Text="{Binding Quantity, Mode=TwoWay}" /><TextBlock Text="{Binding UnitOfMeasure.Name}" />

您的 View 不需要更改以显示新的度量单位,您只需将新的 UOM 分配给 UnitOfMeasure 属性,以及对 Quantity 的任何后续调用返回新的转换率。

显然我遗漏了一些通知代码,但您可以填写

这是否使事情变得更容易,或者您是否已经考虑过这一点?

我知道您不想用 UOM 字符串“污染”您的模型,但 UOM 确实是模型的一部分。如果不是,那至少是一个 ViewModel 问题,但我不会费心去改变你的观点以适应你可以在没有

关于c# - 是否有一种干净的方法来处理 WPF 应用程序中的单位(度数、弧度等)转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730984/

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