在 TornadoFX 中,如何使用 objectBinding 将 BigDecimal 属性绑定到另一个 BigDecimal 属性?
In TornadoFX, how can I bind BigDecimal properites to another BigDecimal property using objectBinding?
我正在尝试创建一个绑定 BigDecimal
属性,它是对另外两个 BigDecimal
属性的计算,如下所示:
val caculatedProperty: ObjectProperty<BigDecimal> = objectBinding<Any, BigDecimal>(sumProperty, discountProperty) { ... }
...就像我对 StringProperty
或 IntegerProperty
所做的那样,否则它可以正常工作。然而,这次我得到了一个类型不匹配:它期望 ObjectProperty<BigDecimal>
,但收到 ObjectBinding<BigDecimal?>
.
这里有什么问题?我是否错误地使用了 objectProperty()
方法?我应该使用其他方法来创建自定义对象的绑定吗?
编辑:
问题是我试图用 ObjectBinding<BigDecimal>
覆盖父 class 的 ObjectProperty<BigDecimal>
。就我而言,解决方案是将原始 ObjectProperty<BigDecimal>
抽象化,并将实现留给继承它的 classes。
所有 xBinding
函数 returns 绑定,而不是属性。如果您考虑一下,如果计算出的 属性 是可写的,它会如何表现?它是否应该写回底层属性? TornadoFX 实际上也支持这些类型的代理属性,但我怀疑这不是您想要的。
您想知道为什么得到 ObjectBinding<BigDecimal?>
而不是 ObjectBinding<BigDecimal>
吗?
原因是基础 属性 可能为空,如果是这样,我们可能希望从计算的绑定中也 return 为空。
这通常不会产生问题,属性 仍然可以观察到,并且会携带正确计算的 BigDecimal
值。
我正在尝试创建一个绑定 BigDecimal
属性,它是对另外两个 BigDecimal
属性的计算,如下所示:
val caculatedProperty: ObjectProperty<BigDecimal> = objectBinding<Any, BigDecimal>(sumProperty, discountProperty) { ... }
...就像我对 StringProperty
或 IntegerProperty
所做的那样,否则它可以正常工作。然而,这次我得到了一个类型不匹配:它期望 ObjectProperty<BigDecimal>
,但收到 ObjectBinding<BigDecimal?>
.
这里有什么问题?我是否错误地使用了 objectProperty()
方法?我应该使用其他方法来创建自定义对象的绑定吗?
编辑:
问题是我试图用 ObjectBinding<BigDecimal>
覆盖父 class 的 ObjectProperty<BigDecimal>
。就我而言,解决方案是将原始 ObjectProperty<BigDecimal>
抽象化,并将实现留给继承它的 classes。
所有 xBinding
函数 returns 绑定,而不是属性。如果您考虑一下,如果计算出的 属性 是可写的,它会如何表现?它是否应该写回底层属性? TornadoFX 实际上也支持这些类型的代理属性,但我怀疑这不是您想要的。
您想知道为什么得到 ObjectBinding<BigDecimal?>
而不是 ObjectBinding<BigDecimal>
吗?
原因是基础 属性 可能为空,如果是这样,我们可能希望从计算的绑定中也 return 为空。
这通常不会产生问题,属性 仍然可以观察到,并且会携带正确计算的 BigDecimal
值。