Mac: Fix issue updating items in a GridView #2699
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When certain collection updates happen, such as replacing an item or a range of items happen, then the visual state of the GridView could get out of whack as it could be reloading using the wrong item.
This happens because on Mac one must call
NSTableView.BeginUpdates()
before all updates are registered, thenNSTableView.EndUpdates()
after. Since the collection isn't actually changed when it calledRemoveItem
, thenInsertItem
, it could refresh the view using invalid state of the collection.Now there are new virtual methods in
CollectionChangedHandler
forBeginUpdates()
andEndUpdates()
which can be forwarded to handlers in the case that the collection changed event causes multiple methods to be called.Additionally, there are also
ReplaceItem
andReplaceRange
overrides in the case that replacing a single item can just refresh that row making it more efficient, and in the case of Mac will no longer make the refreshed item "slide down".