diff --git a/src/main/java/com/tobiasdiez/easybind/MappedBackedList.java b/src/main/java/com/tobiasdiez/easybind/MappedBackedList.java index 8f483ee..de513b7 100644 --- a/src/main/java/com/tobiasdiez/easybind/MappedBackedList.java +++ b/src/main/java/com/tobiasdiez/easybind/MappedBackedList.java @@ -45,8 +45,8 @@ protected void sourceChanged(ListChangeListener.Change change) { } nextPermutation(from, to, permutation); } else if (change.wasUpdated()) { - backingList.set(change.getFrom(), mapper.apply(getSource().get(change.getFrom()))); - nextUpdate(change.getFrom()); + E old = backingList.set(change.getFrom(), mapper.apply(getSource().get(change.getFrom()))); + nextSet(change.getFrom(), old); } else { if (change.wasRemoved()) { int removePosition = change.getFrom(); diff --git a/src/test/java/com/tobiasdiez/easybind/MappedBackedListTest.java b/src/test/java/com/tobiasdiez/easybind/MappedBackedListTest.java new file mode 100644 index 0000000..041dea4 --- /dev/null +++ b/src/test/java/com/tobiasdiez/easybind/MappedBackedListTest.java @@ -0,0 +1,31 @@ +package com.tobiasdiez.easybind; + +import javafx.beans.Observable; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.collections.transformation.SortedList; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MappedBackedListTest { + + @Test + public void testSortedListUpdatesWithMappedBackedList() { + ObservableList list = FXCollections.observableArrayList(number -> new Observable[]{number}); + ObservableList mappedList = EasyBind.mapBacked(list, IntegerProperty::get); + SortedList sortedList = new SortedList<>(mappedList); + + IntegerProperty number = new SimpleIntegerProperty(1); + list.add(number); + + assertEquals(1, sortedList.get(0)); + + number.set(2); + + assertEquals(2, sortedList.get(0)); + } +}