2017-02-07 31 views
0

Я пытаюсь создать переплетены BigDecimal свойство, которое является вычисление двух других BigDecimal Properites, как это:В TornadoFX, как я могу привязать свойства BigDecimal к другому свойству BigDecimal с помощью objectBinding?

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

... как бы я сделал с StringProperty или IntegerProperty, и в противном случае будет работать без вопросы. Однако на этот раз я получаю несоответствие типа: он ожидает ObjectProperty<BigDecimal>, но получает ObjectBinding<BigDecimal?>.

В чем проблема? Использовал ли я метод objectProperty() неправильно? Должен ли я использовать какой-либо другой метод для создания привязки настраиваемого объекта?

EDIT:

Проблема в том, что я пытался переопределить ObjectProperty<BigDecimal> из родительского класса с ObjectBinding<BigDecimal>. Решение в моем случае состояло в том, чтобы сделать оригинальный текст ObjectProperty<BigDecimal> и оставить реализацию классам, которые наследуют его.

ответ

0

Все функции xBinding возвращают привязки, а не свойства. Если вы думаете об этом, как будет вести себя расчетное свойство, если оно будет доступно для записи? Должна ли она писать обратно в основные свойства? TornadoFX фактически поддерживает эти свойства прокси-сервера, но я подозреваю, что это не то, что вам нужно.

Вам интересно, почему вы получаете ObjectBinding<BigDecimal?> вместо ObjectBinding<BigDecimal>?

Причина в том, что базовое свойство может иметь значение NULL, и если это так, мы могли бы также вернуть null из вычисленного связывания.

Это, как правило, не создает проблему, свойство все еще наблюдается и будет нести правильное рассчитанное значение BigDecimal.

+0

Есть ли способ создания (возможно только для чтения) 'Property' из' Binding'? Я хочу использовать мои привязки в ItemViewModel, но я не могу использовать 'bind {}', потому что это 'Binding', а не' Property' ... –

+0

Я использовал 'ReadOnlyObjectWrapper', чтобы превратить привязку в' ReadOnlyObjectProperty'. Есть ли способ лучше? –

+0

Действительно интересная проблема. Я посмотрю на это в выходные и вернусь к вам :) –