2017-02-07 19 views
0

我試圖創建一個綁定BigDecimal屬性它是其他兩個BigDecimal性質在的計算,像這樣:在TornadoFX中,如何使用objectBinding將BigDecimal特性綁定到另一個BigDecimal屬性?

val caculatedProperty: ObjectProperty<BigDecimal> = objectBinding<Any, BigDecimal>(sumProperty, discountProperty) { ... } 

...就像我會StringPropertyIntegerProperty做的,能不工作,否則的問題。但是,這一次我得到一個類型不匹配:它期望ObjectProperty<BigDecimal>,但收到ObjectBinding<BigDecimal?>

這裏有什麼問題?我錯誤地使用了objectProperty()方法嗎?我應該使用其他方法創建自定義對象的綁定嗎?

編輯:

的問題是,我試圖從父類與ObjectBinding<BigDecimal>覆蓋ObjectProperty<BigDecimal>。在我的情況下,解決方案是創建原始的ObjectProperty<BigDecimal>抽象,並將實現留給繼承它的類。

回答

0

所有xBinding函數都會返回綁定,而不是屬性。如果你仔細想想,如果計算屬性是可寫的,它將如何表現?它應該回寫到底層的屬性中嗎? TornadoFX實際上也支持這些類型的代理屬性,但我懷疑這不是你所追求的。

你想知道你爲什麼得到ObjectBinding<BigDecimal?>而不是ObjectBinding<BigDecimal>

原因是基礎屬性可能爲空,如果是這樣,我們可能想要從計算的綁定中返回null。

這通常不會產生問題,該屬性仍然是可觀察的,並且會攜帶正確計算的BigDecimal值。

+0

有沒有辦法從'Binding'創建一個(可能是隻讀的)'Property'?我想在ItemViewModel中使用我的綁定,但是我不能使用'bind {}',因爲它是'Binding',而不是'Property' ... –

+0

我已經使用'ReadOnlyObjectWrapper'將綁定轉換爲' ReadOnlyObjectProperty'。有沒有更好的辦法? –

+0

確實有趣的問題。我會在週末期間對此進行調查並回復你:) –

相關問題